web-dev-qa-db-fra.com

Ajouter un wrapper à youtube embed automatiquement?

Avec les nouvelles versions de WordPress, YouTube oEmbeds auto. Sur ce site particulier sur lequel je travaille, j'ai besoin d'un wrapper div unique autour de la iframe incorporée. J'ai jeté un coup d'œil dans mon functions.php mais je n'ai rien vu de lié à YouTube. Où pourrais-je trouver le code dont j'ai besoin pour ajouter mon code HTML supplémentaire?

2
MVS

Créez un plugin personnalisé pour votre site, mettez-y ce code.

add_filter('oembed_dataparse','oembed_youtube_add_wrapper',10,3);
function oembed_youtube_add_wrapper($return, $data, $url) {
    if ($data->provider_name == 'YouTube') {
        return "<div class='whatever'>{$return}</div>";
    } else {
        return $return;
    }
}

Remarque: Le filtre s'exécute lorsque les données sont collectées à partir du fournisseur oembed. Ainsi, si vous avez déjà incorporé le message et que les données incorporées sont mises en cache, cela ne le modifiera pas.

4
Otto

Personnellement, j'ai trouvé le filtre oembed_dataparse assez difficile à utiliser; parfois cela fonctionnait, parfois non; et lorsqu'il est utilisé conjointement avec des instances personnalisées de TinyMCE, il semble que l'encapsuleur ajouté ait été intégré au contenu plutôt que d'être ajouté via le filtre en sortie.

J'ai trouvé le filtre embed_oembed_html beaucoup plus fiable et fonctionne à chaque fois:

function vnmFunctionality_embedWrapper($html, $url, $attr, $post_id) {
    return '<div class="embedwrapper">' . $html . '</div>';
}

add_filter('embed_oembed_html', 'vnmFunctionality_embedWrapper', 10, 4);

Notez que cela va envelopper tout oEmbeds. Si vous souhaitez cibler spécifiquement YouTube:

function vnmFunctionality_embedWrapper($html, $url, $attr, $post_id) {

    if (strpos($html, 'youtube') !== false) {
        return '<div class="youtubewrapper">' . $html . '</div>';
    }

    return $html;
}
3
indextwo