web-dev-qa-db-fra.com

Manipuler oembed_dataparse a cessé de fonctionner pour les intégrations YouTube

Mon code de référence pour manipuler les insertions YouTube ne fonctionne plus. Quelqu'un peut-il m'expliquer ce que je fais mal?

Ceci est mon code dans functions.php

// OEMBED FILTER
function bolster_oembed_filter( $return, $data ) {
    // YOUTUBE (ADD PARAMS, NOCOOKIE DOMAIN)
    if(
            is_object( $data ) 
        &&  property_exists( $data, 'provider_name' )
        &&  'YouTube' === $data->provider_name
    ){
        $return = preg_replace("@src=(['\"])?([^'\">\s]*)@", "src=$1$2?rel=0&showinfo=0&wmode=opaque", $return);
        $return = preg_replace('/youtube\.com\/(v|embed)\//s', 'youtube-nocookie.com/$1/', $return);
    }
    // VIDEO (ADD WRAPPER)
    if(
            is_object( $data ) 
        &&  property_exists( $data, 'type' )
        &&  'video' === $data->type
    ){
        $return = '<figure class="media">'.$return.'</figure>';
    }
    return $return;
}
add_filter('oembed_dataparse', 'bolster_oembed_filter', 10, 2 );

Comme vous pouvez le constater, je vérifie si le fournisseur est YouTube et manipule la sortie lorsque le résultat est true. J'emballe également la sortie dans une balise <figure> lorsque le type incorporé est vidéo.

Lorsque j'intègre une vidéo Vimeo, le code d'intégration est enveloppé dans la balise <figure>. Lorsque j'intègre une vidéo YouTube, celle-ci est incorporée, mais aucune de mes manipulations sont appliquées. Je sais que cela fonctionnait jadis. Il semble qu'une version récente de WordPress ait changé quelque chose qui empêche YouTube de ne plus être affecté par oembed_dataparse.

J'ai nettoyé le cache oembed avant de procéder aux tests, je suis donc sûr que ce n'est pas pour cette raison que cela se produit.

3
Florian

Je pense avoir résolu en faisant ceci:

add_filter('oembed_dataparse', 'bolster_oembed_filter', 0, 2 );

J'ai changé la priorité de add_filter statement à 0, maintenant cela fonctionne à nouveau.

2
Florian