web-dev-qa-db-fra.com

Utilisation d'un shortcode audio pour les URL .mp3 avec une chaîne de requête

J'essaie d'utiliser le shortcode audio avec un fichier audio avec une chaîne de requête à la fin de l'URL et cela ne fonctionnera pas. La raison en est que j'aimerais utiliser des URL signées en cours d'expiration avec Amazon S3.

Si j'utilise une URL comme

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

comme le src dans un appel à wp_audio_shortcode() cela fonctionne très bien. Mais si j'utilise une URL comme

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

alors wp_audio_shortcode() crache simplement un lien HTML au lieu de l’incorporation audio et du code du lecteur. Dans mes tests, il semble que le shortcode nécessite une extension de fichier .mp3 à la fin de l'URL. Existe-t-il un moyen de faire fonctionner le code court avec une chaîne de requête sur l'URL?

D'autres solutions à suggérer?

3
Jamie Hamick

Le problème:

Le problème semble être que wp_check_filetype() ne reconnaît pas les fichiers mp3 avec les paramètres GET.

Solutions possibles:

Vous avez deux options dans la mesure où je peux voir:

1) Remplacez le shortcode audio par le filtre wp_audio_shortcode_override.

2) ou autorisez toute extension audio via le filtre wp_audio_extensions.

Voici un exemple d'utilisation de cette dernière option:

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

Donc, juste pour expliquer ce qui se passe ici:

Juste avant l'appel wp_get_audio_extensions(), à l'intérieur de la fonction wp_audio_shortcode(), nous "détournons" le crochet wp_audio_shortcode_override afin d'autoriser l'extension de fichier audio vide. La raison en est que la vérification wp_check_filetype() renvoie une chaîne vide pour les extensions de fichier non reconnues. Nous nous assurons ensuite que cette modification ne s'applique que lorsque la source audio est hébergée sur bucketname.s3.amazonaws.com.

J'espère que ça aide.

2
birgire