Come avvolgere automaticamente un elemento intorno a un iframe o embed nel contenuto?

15 ago 2012, 05:17:53
Visualizzazioni: 18.1K
Voti: 8

Vorrei che WordPress avvolgesse automaticamente un div intorno a qualsiasi iframe o embed quando vengono utilizzati in the_content...come posso ottenere questo risultato?

0
Tutte le risposte alla domanda 3
3
21

Ecco la soluzione che ho utilizzato:

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
Commenti

Se non sbaglio, affinché il filtro funzioni, l'ultima riga dovrebbe essere: add_filter( 'embed_oembed_html', 'wrap_embed_with_div', 10, 4 );

its_me its_me
3 dic 2013 22:07:17

L'ultimo parametro in add_filter è accepted_args, che è un intero che indica il numero di argomenti accettati dalla funzione, che in questo caso è 3.

user23385 user23385
10 feb 2014 19:28:23

è corretto @user23385, il 4° argomento sarebbe $post_id. mentre nella tua risposta utilizzi solo l'argomento 1. quindi sarebbe sicuro saltare il 10 (valore predefinito) e il 3 visto che hai bisogno solo di 1 e anche quello sarebbe il valore predefinito.. (ma in tal caso dovresti anche eliminare $url & $attr nella tua funzione) grazie comunque per la risposta, esattamente ciò di cui avevo bisogno :)

honk31 honk31
16 nov 2018 13:19:32
5

Con i filtri di Wordpress. Aggiungi questo al tuo functions.php:

function div_wrapper($content) {
    // trova tutti gli iframe
    $pattern = '~<iframe.*</iframe>|<embed.*</embed>~';
    preg_match_all($pattern, $content, $matches);

    foreach ($matches[0] as $match) {
        // avvolge l'iframe trovato con un div
        $wrappedframe = '<div>' . $match . '</div>';

        // sostituisce l'iframe originale con quello nuovo nel contenuto
        $content = str_replace($match, $wrappedframe, $content);
    }

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

Scusate il ritardo nella risposta, sono stato via per lavoro... sembra molto promettente, proverò e vi farò sapere.

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

Funziona alla grande, ma c'è un modo per limitare il wrapper in modo che produca l'output solo una volta dopo aver rilevato il primo iframe o oggetto incorporato?...

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

Potresti usare preg_match invece di preg_match_all per ottenere solo un risultato. Oppure riscrivere il foreach per interrompersi dopo la prima iterazione. O non usare un foreach e prendere semplicemente la prima corrispondenza ($match = $matches[0]). Assicurati solo di verificare prima se hai ottenuto delle corrispondenze.

pbd pbd
18 ago 2012 13:52:03

È fottutamente fantastico! L'ho usato per assicurarmi che i video siano responsive con la classe helper di bootstrap: $wrappedframe = '<div class="embed-responsive embed-responsive-16by9">' . $match . '</div>';

Radmation Radmation
8 giu 2017 23:44:54

Ho centinaia di iframe sul mio sito e ho aggiunto questo blocco di codice al mio file functions.php ma non è successo niente. Ho provato a usare jQuery e diversi altri metodi e non importa cosa faccia, non riesco a racchiudere un div attorno ai miei iframe.

Nick Nick
8 lug 2019 21:08:37
2

prova jQuery

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

Questa soluzione si è rivelata alla fine più semplice e utile dopo aver realizzato che la funzione PHP stava prendendo di mira uno spettro troppo ampio di iframe in tutto il sito.

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

Ovviamente questo non funzionerà se il browser ha JavaScript disabilitato.

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