Cómo envolver automáticamente un elemento alrededor de un iframe o embed en el contenido
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?
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
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
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
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');
Disculpas por la respuesta tardía, he estado fuera por trabajo... esto parece muy prometedor, lo probaré y daré retroalimentación.
Mr.Brown
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
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
¡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
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