Cum să înfășori automat un element în jurul unui iframe sau embed în conținut?
Aș dori ca WordPress să înfășoare automat un div în jurul oricărui iframe
sau embed
atunci când sunt folosite în the_content
... cum poate fi realizat acest lucru?

Dacă nu greșesc, pentru ca filtrul să funcționeze, ultima linie ar trebui să fie: add_filter( 'embed_oembed_html', 'wrap_embed_with_div', 10, 4 );

Ultimul parametru din add_filter este accepted_args, care este un întreg ce indică numărul de argumente acceptate de funcție, care în acest caz este 3.

corect @user23385, al 4-lea argument ar fi $post_id
. în timp ce în răspunsul tău folosești doar argumentul 1. deci ar fi sigur să sări peste 10
(valoarea implicită) și 3
deoarece ai nevoie doar de 1
care ar fi și valoarea implicită.. (dar atunci ar trebui să ștergi și $url
& $attr
din funcția ta) mulțumesc pentru răspuns, exact ce aveam nevoie :)

Cu filtrele WordPress. Adaugă acest cod în fișierul tău functions.php:
function div_wrapper($content) {
// potrivește orice iframe
$pattern = '~<iframe.*</iframe>|<embed.*</embed>~';
preg_match_all($pattern, $content, $matches);
foreach ($matches[0] as $match) {
// înfășoară iframe-ul găsit într-un div
$wrappedframe = '<div>' . $match . '</div>';
// înlocuiește iframe-ul original cu cel nou în conținut
$content = str_replace($match, $wrappedframe, $content);
}
return $content;
}
add_filter('the_content', 'div_wrapper');

Scuze pentru răspunsul întârziat, am fost plecat pentru munca... pare foarte promițător, o să încerc și revin cu feedback.

Funcționează excelent, dar există vreo modalitate de a limita wrapper-ul să afișeze doar o singură dată după detectarea primului iframe sau obiect embedded?...

Poți folosi preg_match în loc de preg_match_all pentru a obține un singur rezultat. Sau poți rescrie foreach să se oprească după prima iterație. Sau să nu folosești foreach și să iei doar prima potrivire ($match = $matches[0]). Doar asigură-te că verifici mai întâi dacă ai obținut vreo potrivire.

Este absolut incredibil! Am folosit asta pentru a asigura că videoclipurile sunt responsive cu clasa helper din bootstrap: $wrappedframe = '<div class="embed-responsive embed-responsive-16by9">' . $match . '</div>';

Aceasta s-a dovedit a fi o soluție mai simplă și mai utilă mai târziu, după ce am realizat că funcția PHP țintea un spectru prea larg de iframe de pe tot site-ul.
