对带有查询字符串的.mp3 URL使用音频快捷码

时间:2014-07-01 作者:Jamie Hamick

我正在尝试对URL末尾带有查询字符串的音频文件使用音频快捷码,但它不会起作用。原因是我想在Amazon S3中使用过期的签名URL。

如果我使用如下URL

http://bucketname.s3.amazonaws.com/audiofile.mp3

作为调用中的srcwp_audio_shortcode() 它工作得很好。但是如果我使用像这样的URL

http://bucketname.s3.amazonaws.com/audiofile.mp3?AWSAccessKeyId=XXXXXXXXXXXX&Expires=1234567890&Signature=XXXXXXXXXXXXXXXXXX

然后wp_audio_shortcode() 只需弹出一个HTML链接,而不是音频嵌入和播放器代码。在我的测试中,短代码似乎需要的文件扩展名为。mp3位于URL的末尾。有没有办法让短代码与URL上的查询字符串一起工作?

还有其他建议吗?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

问题:问题似乎是wp_check_filetype() 无法识别mp3 具有的文件GET 参数。

可能的解决方法:

据我所知,您有两种选择:

1) 用覆盖音频短代码wp_audio_shortcode_override 滤器

2) 或允许通过wp_audio_extensions 滤器

下面是如何实现后一个选项的示例:

/**
 * Allow unrecognize audio sources hosted on \'bucketname.s3.amazonaws.com\'.
 *
 * @see http://wordpress.stackexchange.com/a/152352/26350
 */

add_filter( \'wp_audio_shortcode_override\',
    function( $html, $atts )
    {
        if( \'bucketname.s3.amazonaws.com\' === parse_url( $atts[\'src\'], PHP_URL_HOST ) )
        {
            add_filter( \'wp_audio_extensions\', \'wpse_152316_wp_audio_extensions\' );
        }
        return $html;
    }
, PHP_INT_MAX, 2 );
在哪里

function wpse_152316_wp_audio_extensions( $ext )
{
    remove_filter( current_filter(), __FUNCTION__ );
    $ext[] = \'\';
    return $ext;
}
所以,为了解释这里发生了什么:

就在wp_get_audio_extensions() 呼叫,在wp_audio_shortcode() 函数,我们“劫持”了wp_audio_shortcode_override 钩子,以允许空的音频文件扩展名。原因是wp_check_filetype() check为无法识别的文件扩展名返回空字符串。然后,我们确保仅当音频源位于bucketname.s3.amazonaws.com.

我希望这有帮助。

结束

相关推荐

如果找到任何`Add_Shortcode()`,是否对_Content()应用筛选器以分隔内容?

我甚至不知道这是否可能array_map 或str_replace, 但想法如下:此函数用于获取发送前的内容,clean_custom_content, 这就是我不知道如何处理的地方。。所以让我们假设我们拥有所有的内容,这些内容将被包装在section 但每次都有一个简短的代码[] 这需要在输出短代码的内容时关闭。他们打开了一个新的section 并继续该页面的内容。有意义吗?任何想法或帮助都会很好。。谢谢function get_custom_content( $more_link_text = nul