it-swarm.com.de

Verwenden des Audio-Shortcodes für MP3-URLs mit einer Abfragezeichenfolge

Ich versuche, den Audio-Shortcode mit einer Audiodatei mit einer Abfragezeichenfolge am Ende der URL zu verwenden, aber das funktioniert nicht. Der Grund dafür ist, dass ich ablaufende signierte URLs mit Amazon S3 verwenden möchte.

Wenn ich eine URL wie

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

als src in einem Aufruf von wp_audio_shortcode() funktioniert es einwandfrei. Aber wenn ich eine URL wie verwende

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

dann spuckt wp_audio_shortcode() einfach einen HTML-Link aus, anstatt den Audio-Embed und den Player-Code. In meinen Tests scheint es, dass der Shortcode eine Dateierweiterung von .mp3 am Ende der URL erfordert. Gibt es eine Möglichkeit, den Funktionscode mit einer Abfragezeichenfolge in der URL arbeiten zu lassen?

Gibt es noch andere Lösungsvorschläge?

3
Jamie Hamick

Das Problem:

Das Problem scheint zu sein, dass wp_check_filetype()mp3 -Dateien mit GET -Parametern nicht erkennt.

Mögliche Problemumgehungen:

Soweit ich sehe, haben Sie zwei Möglichkeiten:

1) Überschreiben Sie den Audio-Shortcode mit dem Filter wp_audio_shortcode_override.

2) oder erlauben Sie Audio-Erweiterungen über den wp_audio_extensions-Filter.

Hier ist ein Beispiel, wie Sie die letztere Option implementieren können:

/**
 * 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 );

woher

function wpse_152316_wp_audio_extensions( $ext )
{
    remove_filter( current_filter(), __FUNCTION__ );
    $ext[] = '';
    return $ext;
}

Also nur um zu erklären, was hier passiert:

Kurz vor dem Aufruf von wp_get_audio_extensions() "hijacken" wir in der Funktion wp_audio_shortcode() den Hook wp_audio_shortcode_override, um die leere Audiodateierweiterung zuzulassen. Der Grund dafür ist, dass die wp_check_filetype()-Prüfung eine leere Zeichenfolge für nicht erkannte Dateierweiterungen zurückgibt. Wir stellen dann sicher, dass diese Änderung nur angewendet wird, wenn die Audioquelle auf bucketname.s3.amazonaws.com gehostet wird.

Ich hoffe das hilft.

2
birgire