Je connaissais déjà un cas où Wordpress a ajouté des balises <p>
. Cependant, je traite maintenant de la situation opposée. Lorsque j'ajoute [] des codes courts à l'intérieur des balises <p>
, WordPress supprime automatiquement les balises <p>
.
<p>[anyshortcode]Hello World[/anyshortcode]</p>
Devient:
Hello World
L'ajout de dir = "ltr" aux balises <p>
semble résoudre le problème. Peut-être existe-t-il un moyen de l'ajouter par programmation à toutes les balises <p>
?
Des idées pour résoudre le problème?
C’est à peu près ce que Foxsk8 a mentionné dans un commentaire. Le mérite lui revient donc, mais ces instructions supplémentaires seront utiles. Le plugin WordPress appelé TinyMCE Advanced résoudra votre problème.
Ce plugin est livré avec une option dans Settings > TinyMCE Advanced
qui corrigera vos balises <p>
qui disparaissent. Cochez la case intitulée Stop removing the <p> and <br /> tags when saving and show them in the Text editor
et vos balises <p>
seront préservées.
TinyMCE est programmé pour rendre l'édition facile (ce qui pour nous n'est pas le cas du langage HTML). Par défaut, is ne devrait pas accepter le marquage <p>
autour de [BLOCKS]. En effet, "[]" est utilisé pour le shortcode non seulement dans WP mais aussi dans une tonne de CMS basés sur PHP. Les codes courts doivent avoir le wrapper de contenu approprié.
Cela signifie que la solution consiste à ajouter les balises <p>
dans votre code shortcode afin que votre contenu soit enveloppé comme vous le souhaitez.
Vous pouvez ajouter ce code ci-dessous dans votre fichier 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;
}
Appelez maintenant cette fonction là où vous le souhaitez,
<?php echo content_formatter( get_field('field_name') ); ?>