WordPress rimuove i tag <p>?
Mi sono già imbattuto in un caso in cui WordPress aggiungeva i tag <p>
. Tuttavia ora sto affrontando la situazione opposta. Quando aggiungo shortcode [] all'interno dei tag <p>
, WordPress rimuove automaticamente i tag <p>
.
<p>[anyshortcode]Ciao Mondo[/anyshortcode]</p>
Diventa:
Ciao Mondo
Aggiungere dir="ltr" ai tag <p>
sembra risolvere il problema, forse c'è un modo per aggiungerlo programmaticamente a tutti i tag <p>
?
Avete idee su come risolvere questo problema?
Questo è praticamente ciò che Foxsk8 ha menzionato in un commento, quindi il merito dovrebbe andare a lui, ma queste istruzioni aggiuntive saranno utili. Il plugin per WordPress chiamato TinyMCE Advanced risolverà il tuo problema.
Questo plugin include un'opzione all'interno di Impostazioni > TinyMCE Advanced
che risolverà il problema dei tag <p>
che scompaiono. Seleziona la casella di controllo con l'etichetta Interrompi la rimozione dei tag <p> e <br /> durante il salvataggio e mostrali nell'editor di testo
e i tuoi tag <p>
verranno preservati.

TinyMCE è programmato per rendere facile la modifica (cosa che per noi esperti di HTML spesso non è il caso). Per impostazione predefinita non dovrebbe accettare i tag <p>
attorno ai [BLOCCHI]. Questo perché "[]" sono utilizzati per gli shortcode non solo in WP ma in una tonnellata di CMS basati su PHP. Gli shortcode dovrebbero avere il wrapper di contenuto appropriato.
Ciò significa che la soluzione è aggiungere i tag <p>
nel codice del tuo shortcode in modo che il tuo contenuto sia avvolto nel modo che desideri.

Come aggiunta a Foxsk8 e E. Serrano. Se il post contiene <p>
intorno agli shortcode, WordPress lo rimuoverà comunque. Questo avviene nel filtro shortcode_unautop che viene aggiunto in '\wp-includes\default-filters.php'. Garantisce che gli shortcode non siano racchiusi in <p>...</p>
.
Quindi, dobbiamo rimuoverli:
remove_filter( 'the_content', 'shortcode_unautop' );

Puoi aggiungere il seguente codice nel tuo file function.php
function content_formatter($content){
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}
$array = array(
'<p>[' => '[',
']</p>' => ']',
']<br />' => ']'
);
$new_content = strtr($new_content, $array);
return $new_content;
}
Ora chiama questa funzione dove necessario come:
<?php echo content_formatter( get_field('field_name') ); ?>
