WordPress elimină tag-urile <p>?
M-am confruntat deja cu un caz în care WordPress a adăugat tag-uri <p>
. Însă acum mă confrunt cu situația opusă. Când adaug shortcode-uri [] în interiorul tag-urilor <p>
, WordPress elimină automat tag-urile <p>
.
<p>[anyshortcode]Salut Lume[/anyshortcode]</p>
Devine:
Salut Lume
Adăugarea atributului dir="ltr" la tag-urile <p>
pare să rezolve problema, poate există o modalitate de a-l adăuga programatic la toate tag-urile <p>
?
Aveți idei cum să rezolv această problemă?
Aceasta este practic ceea ce a menționat Foxsk8 într-un comentariu, așa că creditul ar trebui să-i revină lui, dar aceste instrucțiuni suplimentare vor fi utile. Plugin-ul WordPress numit TinyMCE Advanced vă va rezolva problema.
Acest plugin vine cu o opțiune în interiorul Settings > TinyMCE Advanced
care vă va repara tag-urile <p>
care dispar. Bifați caseta de selectare intitulată Stop removing the <p> and <br /> tags when saving and show them in the Text editor
și tag-urile dvs. <p>
vor fi păstrate.

TinyMCE este programat pentru a face editarea ușoară (ceea ce pentru noi, cei pricepuți în HTML, adesea nu este cazul). În mod implicit, nu ar trebui să accepte tag-urile <p>
în jurul [BLOCURILOR]. Acest lucru se întâmplă deoarece "[]" sunt folosite pentru shortcode-uri nu doar în WP, ci și într-o multime de CMS-uri bazate pe PHP. Shortcode-urile ar trebui să aibă învelișul de conținut adecvat.
Prin urmare, soluția este să adăugați tag-urile <p>
în codul shortcode-ului dvs., astfel încât conținutul dvs. să fie învelit în modul dorit.

Ca o completare la Foxsk8 și E. Serrano. Dacă un post conține <p>
în jurul shortcode-urilor, WordPress le va elimina în continuare. Acest lucru se întâmplă în filtrul shortcode_unautop care este adăugat în '\wp-includes\default-filters.php'. Acest filtru asigură că shortcode-urile nu sunt încadrate în <p>...</p>
.
Prin urmare, trebuie să le eliminăm:
remove_filter( 'the_content', 'shortcode_unautop' );

Puteți adăuga următorul cod în fișierul functions.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)); // Formatează textul conform standardelor WordPress
}
}
$array = array(
'<p>[' => '[', // Elimină tagurile <p> înainte de [
']</p>' => ']', // Elimină tagurile </p> după ]
']<br />' => ']' // Elimină <br /> după ]
);
$new_content = strtr($new_content, $array); // Înlocuiește șirurile conform array-ului definit
return $new_content;
}
Acum apelați această funcție oriunde este necesar, de exemplu:
<?php echo content_formatter( get_field('field_name') ); ?>
