Agregar envoltorio solo a los videos de youtube a través de la función de filtro embed_oembed_html

2

Tengo un filtro trabajando para envolver enlaces incrustados en un envoltorio sensible. Ver codigo

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>';
}

El único problema es que esto también se aplica a todo lo demás en la lista de miembros, es decir, incrustaciones de Twitter, instagram, etc. Estaba intentando agregar una declaración if, pero no tengo suerte. Básicamente, sería genial simplemente agregar esta envoltura a las incrustaciones de video como youtube / vimeo. Aquí es lo que tengo hasta ahora.

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;
}
}
    
pregunta kidA 31.01.2017 - 05:03

1 respuesta

5

$url contendrá la URL completa de la fuente incrustada. Por ejemplo, https://www.youtube.com/watch?v=_UmOY6ek_Y4 , por lo que debe buscar dentro de $url para ver si aparece el nombre del proveedor:

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>';
}
    
respondido por el Dave Romsey 31.01.2017 - 06:08

Lea otras preguntas en las etiquetas