Cum să înfășori automat un element în jurul unui iframe sau embed în conținut?

15 aug. 2012, 05:17:53
Vizualizări: 18.1K
Voturi: 8

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?

0
Toate răspunsurile la întrebare 3
3
21

Iată soluția pe care am folosit-o:

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
Comentarii

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 );

its_me its_me
3 dec. 2013 22:07:17

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.

user23385 user23385
10 feb. 2014 19:28:23

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 :)

honk31 honk31
16 nov. 2018 13:19:32
5

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');
15 aug. 2012 09:31:37
Comentarii

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

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

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?...

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

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.

pbd pbd
18 aug. 2012 13:52:03

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

Radmation Radmation
8 iun. 2017 23:44:54

Am sute de iframe-uri pe site-ul meu și am adăugat acest fragment de cod în fișierul functions.php și nu s-a întâmplat nimic. Am încercat să folosesc jQuery și mai multe alte metode și indiferent ce fac nu pot să înfășor un div în jurul iframe-urilor mele.

Nick Nick
8 iul. 2019 21:08:37
2

încearcă jQuery

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

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.

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

Desigur, acest lucru nu va funcționa dacă browserul are JavaScript dezactivat.

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