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

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

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.

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

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

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

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

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.

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

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.
