web-dev-qa-db-ja.com

クエリ文字列を含む.mp3 URLのオーディオショートコードの使用

URLの最後にクエリ文字列を含むオーディオファイルでオーディオショートコードを使用しようとしていますが、うまくいきません。その理由は、Amazon S3で期限切れの署名付きURLを使用したいのです。

のようなURLを使うと

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

wp_audio_shortcode()への呼び出しの中のsrcとしては、それはうまく働きます。しかし、私はのようなURLを使用すると

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

それからwp_audio_shortcode()はオーディオ埋め込みとプレーヤーコードの代わりにHTMLリンクを吐き出すだけです。私のテストでは、ショートコードはURLの最後に.mp3のファイル拡張子が必要です。ショートコードをURLのクエリ文字列で機能させる方法はありますか?

提案する他の解決策はありますか?

3
Jamie Hamick

問題:

問題は、wp_check_filetype()GETパラメータを持つmp3ファイルを認識しないことです。

考えられる回避策:

私が見ることができる限りあなたは2つの選択肢があります。

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()チェックが認識できないファイル拡張子に対して空の文字列を返すためです。それから、この修正はオーディオソースがbucketname.s3.amazonaws.comでホストされている場合にのみ適用されることを確認します。

これが役に立つことを願っています。

2
birgire