Cómo envolver automáticamente un elemento alrededor de un iframe o embed en el contenido

15 ago 2012, 05:17:53
Vistas: 18.1K
Votos: 8

Me gustaría que WordPress envuelva automáticamente un div alrededor de cualquier iframe o embed cuando se usan en the_content... ¿cómo se puede lograr esto?

0
Todas las respuestas a la pregunta 3
3
21

Aquí está la solución que utilicé:

function wrap_embed_with_div($html, $url, $attr) {

     return '<div class="video-container">' . $html . '</div>';

}

 add_filter('embed_oembed_html', 'wrap_embed_with_div', 10, 3);
7 nov 2012 00:14:53
Comentarios

Si no me equivoco, para que el filtro funcione, la última línea debería ser: add_filter( 'embed_oembed_html', 'wrap_embed_with_div', 10, 4 );

its_me its_me
3 dic 2013 22:07:17

El último parámetro en add_filter es accepted_args, que es un entero que indica el número de argumentos aceptados por la función, que en este caso es 3.

user23385 user23385
10 feb 2014 19:28:23

es correcto @user23385, el 4to argumento sería $post_id. mientras que en tu respuesta solo usas el argumento 1. así que sería seguro omitir el 10 (por defecto) y el 3 ya que solo necesitas 1 y eso también sería por defecto.. (pero entonces también necesitarías eliminar $url y $attr en tu función) gracias por la respuesta, exactamente lo que necesitaba :)

honk31 honk31
16 nov 2018 13:19:32
5

Con los filtros de WordPress. Añade esto a tu functions.php:

function div_wrapper($content) {
    // coincide con cualquier iframe
    $pattern = '~<iframe.*</iframe>|<embed.*</embed>~';
    preg_match_all($pattern, $content, $matches);

    foreach ($matches[0] as $match) {
        // envuelve el iframe coincidente con un div
        $wrappedframe = '<div>' . $match . '</div>';

        // reemplaza el iframe original con el nuevo en el contenido
        $content = str_replace($match, $wrappedframe, $content);
    }

    return $content;    
}
add_filter('the_content', 'div_wrapper');
15 ago 2012 09:31:37
Comentarios

Disculpas por la respuesta tardía, he estado fuera por trabajo... esto parece muy prometedor, lo probaré y daré retroalimentación.

Mr.Brown Mr.Brown
18 ago 2012 04:27:22

Esto funciona genial, pero ¿hay alguna manera de limitar el wrapper para que solo se muestre una vez después de detectar el primer iframe u objeto incrustado?...

Mr.Brown Mr.Brown
18 ago 2012 05:21:02

Podrías usar preg_match en lugar de preg_match_all para obtener solo un resultado. O reescribir el foreach para que se interrumpa después de la primera iteración. O no usar un foreach y simplemente obtener la primera coincidencia ($match = $matches[0]). Solo asegúrate de verificar si obtuviste alguna coincidencia primero.

pbd pbd
18 ago 2012 13:52:03

¡Esto es jodidamente increíble! Lo usé para asegurar que los videos sean responsivos con la clase helper de bootstrap: $wrappedframe = '<div class="embed-responsive embed-responsive-16by9">' . $match . '</div>';

Radmation Radmation
8 jun 2017 23:44:54

Tengo cientos de iframes en mi sitio y añadí este trozo de código a mi archivo functions.php y no pasó nada. He intentado usar jQuery y varios otros métodos y sin importar lo que haga no puedo envolver un div alrededor de mis iframes.

Nick Nick
8 jul 2019 21:08:37
2

prueba jQuery

$('iframe').wrap('<div class="wrapper" />');
15 ago 2012 07:09:26
Comentarios

Esta solución terminó siendo más simple y útil más adelante, después de darme cuenta de que la función PHP estaba abarcando un espectro demasiado amplio de iframes en todo el sitio.

Mr.Brown Mr.Brown
6 sept 2012 19:04:46

Por supuesto, esto no funcionará si el navegador tiene JavaScript desactivado.

Craig Tullis Craig Tullis
14 oct 2015 09:15:30