J'ai créé un plugin qui ajoute un shortcode avec un contenu optionnel. S'il n'y a pas de contenu, WordPress essaie toujours de rechercher un tag de fermeture. Ceci est plus clair avec un exemple:
[span class="foo"]
[span class="bar"]
[span class="baz"]stuff[/span]
Voulait:
<span class="foo"></span>
<span class="bar"></span>
<span class="baz">stuff</span>
Réel:
<span class="foo">
[span class="bar"]
[span class="baz"]stuff
</span>
Existe-t-il un moyen de faire en sorte que WordPress génère le premier résultat? Je m'attends à ce que beaucoup d'utilisateurs du plugin soient déroutés par ce comportement. Une solution consiste à modifier the_content
avant que do_shortcode
ne s'exécute, mais c'est assez compliqué. Existe-t-il un moyen propre ou existant de changer ce comportement?
Edit: Je ne demande pas pourquoi ce comportement se produit, je demande un bon moyen de changer ce comportement.
Wordpress a interprété votre shortcode comme ceci:
Le problème principal est que vous avez un numéro abrégé non fermé de la même étiquette devant un numéro abrégé englobant de la même étiquette, qui ne sera pas analysé correctement. La documentation indique que vous pouvez rencontrer des problèmes avec des codes courts non fermés .
Lorsque vous appelez votre shortcode comme ceci:
[span class="foo" /]
[span class="bar" /]
[span class="baz"]stuff[/span]
Vous obtiendrez votre résultat attendu.
Étant donné que le marqueur à fermeture automatique/
est nécessaire dans votre cas d'utilisation, même s'il est généralement considéré comme facultatif, mais comme il oblige l'analyseur à ignorer les balises de fermeture suivantes, il vous donne le résultat attendu.
La solution ci-dessus correspond à l'utilisation correcte des codes courts conformément à l'API WordPress Shortcode . Si vous voulez pré-traiter votre shortcode d'une manière ou d'une autre, vous pouvez le faire, mais en général, il suffit que vos utilisateurs utilisent la syntaxe correcte en premier lieu.
Un shortcode n'a rien à voir avec l'ouverture et la fermeture des tags! Un shortcode est un moyen d'exécuter une fonction et d'extraire les résultats dans le contenu.
add_shortcode ('bonjour', maFonction); function myFunction () {return 'Hello world';}
Mettre le shortcode [hello] dans votre message créera Hello World.