WordPress: rimuovere i paragrafi attorno agli shortcode

WordPress: rimuovere i paragrafi attorno agli shortcode

WordPress è solito aggiungere elementi p e br al contenuto dei vostri post o pagine al fine di preservare la struttura HTML del testo. Il problema sorge quando un paragrafo va a contenere un elemento HTML che, secondo le specifiche, non dovrebbe avere tale elemento come genitore. Questo è ciò che avviene con gli shortcode.

Consideriamo il seguente shortcode:


function block_quote($content) {
	return '<blockquote>' . $content . '</blockquote>';
}

add_shortcode('quote', 'block_quote');

Voi vi aspettereste la seguente marcatura:


<blockquote>...</blockquote>

Invece ottenete questo:


<p><blockquote>...</blockquote></p>

Esistono delle soluzioni a questo problema. Purtroppo tali soluzioni contemplano il caso di paragrafi contenuti all'interno degli shortcode ma non quello dei paragrafi intorno alla marcatura generata dagli shortcode.

Quindi occorre un filtro che effettui un search and replace del nostro caso specifico:


add_filter('the_content', 'remove_quote_p', 20, 1);

function remove_quote_p($content) {
    $content = force_balance_tags($content);
    $content = preg_replace('#<p>\s*+<blockquote\s*/*>\s*#i', '<blockquote>', $content);
    $content = preg_replace('#</blockquote\s*/*>\s*</p>#i', '</blockquote>', $content);
    
    return $content;
}

Speriamo che le future versioni di WordPress risolvano questo problema.

Torna su