web-dev-qa-db-fra.com

Ajouter un wrapper aux vidéos youtube uniquement via la fonction de filtrage embed_oembed_html

J'ai un filtre travaillant pour envelopper les liens embed_oembed dans un wrapper réactif. Voir le code.

add_filter('embed_oembed_html', 'wrap_embed_with_div', 10, 3);

function wrap_embed_with_div($html, $url, $attr) { 
return '<div class="responsive-container">'.$html.'</div>';
}

Le seul problème est que cela s’applique également à tout le reste de la liste oembed, c’est-à-dire l’intégration de Twitter, instagram, etc. J’essayais d’ajouter une déclaration if, mais je n’avais aucune chance. En gros, il serait bon d’ajouter ce wrapper aux vidéos intégrées telles que youtube/vimeo. Voici ce que j'ai eu jusqu'à présent.

add_filter('embed_oembed_html', 'wrap_embed_with_div', 10, 3);

function wrap_embed_with_div($html, $url, $attr) {
if ($url == 'https://youtube.com'){ 
return '<div class="responsive-container">'.$html.'</div>';
}
else { 
return $html;
}
}
3
kidA

$url contiendra l'URL complète de la source d'intégration. Exemple: https://www.youtube.com/watch?v=_UmOY6ek_Y4, vous devez donc rechercher dans $url pour voir si le nom du fournisseur apparaît:

add_filter( 'embed_oembed_html', 'wpse_embed_oembed_html', 99, 4 );
function wpse_embed_oembed_html( $cache, $url, $attr, $post_ID ) {
    $classes = array();

    // Add these classes to all embeds.
    $classes_all = array(
        'responsive-container',
    );

    // Check for different providers and add appropriate classes.

    if ( false !== strpos( $url, 'vimeo.com' ) ) {
        $classes[] = 'vimeo';
    }

    if ( false !== strpos( $url, 'youtube.com' ) ) {
        $classes[] = 'youtube';
    }

    $classes = array_merge( $classes, $classes_all );

    return '<div class="' . esc_attr( implode( $classes, ' ' ) ) . '">' . $cache . '</div>';
}
6
Dave Romsey