web-dev-qa-db-fra.com

Shortcode_unautop () est-il cassé?

shortcode_unautop() dans /wp-includes/formatting.php est censé rechercher des codes courts dans un bloc de texte et supprimer les balises de paragraphe qui les enveloppent.

J'ai eu des problèmes avec les balises de paragraphe en passant par ce processus.

Voici la sortie de var_dump($pee), que j'ai placée au tout début de la fonction, c'est-à-dire la chaîne avant d'être traitée:

string(353) "<p>[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]</p>
"

Tous enveloppés dans des balises de paragraphe, comme prévu.

Je mets alors var_dump(preg_replace( $pattern, '$1', $pee )); juste avant la fin de la fonction, ce qui donne:

string(346) "[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]
"

Tout ce qu'il a fait est de supprimer les balises d'ouverture et de fermeture de l'ensemble du bloc, au lieu de chaque shortcode individuel. J'ai vérifié la valeur de global $shortcode_tags; et tous les codes courts de mon exemple s'y trouvaient.

La fonction est-elle interrompue ou en attend-elle trop? Je suis à peu près sûr que ce n'est pas le cas et qu'il est supposé supprimer toutes les balises de paragraphe - mais je ne peux m'empêcher de penser à autre chose, par exemple des caractères spatiaux inattendus.

2
EpF

Il semble que la fonction est cassé. Le problème est dans trac: https://core.trac.wordpress.org/ticket/14050

J'utilise ceci pour résoudre le problème temporairement: https://core.trac.wordpress.org/attachment/ticket/14050/plugin.php . Ce code échoue toujours avec certains des tests utilisés, mais il résout complètement le problème que j'ai décrit. Je vais donc l'utiliser si je ne trouve pas quelque chose de pratique qui casse.

2
EpF

Je lis la documentation WordPress sur cette fonction et le comportement que vous rencontrez là-bas, est celui qui devrait se produire.

Cette fonction nettoie en dehors du shortcode et non à l'intérieur. La regex ne vérifie pas le contenu du shortcode.

MODIFIER:

https://developer.wordpress.org/reference/functions/shortcode_unautop/

Ne pas utiliser les codes abrégés qui sont autonomes

Garantit que les codes courts ne sont pas wrapped in <p>...</p>.

Tout y est dit.

1
mathieuhays