Comment puis-je échapper un ']' dans un code court?


17

Comment échapper à une parenthèse droite dans un code court?

Je travaille sur un plugin Google Map qui a encodé des points. Parfois, les polygones contiennent le], ce qui fait penser à WP que c'est la fin du shortcode.

Par exemple:

[my_shortcode latitude='36.93'  longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]

J'ai essayé ]ce qui ne pose pas de problème pour WP, mais cela cause un problème pour mon code Google map. Je pourrais utiliser Regex pour remplacer], mais il existe peut-être un moyen plus simple. Le shortcode a-t-il un caractère d'échappement?

Réponses:


18

Je ne connais pas de syntaxe d'échappement officielle pour les shortcodes et il n'y en a probablement pas.

Lorsque wordpress analyse les shortcodes, il recherche [ et ] . Si vous souhaitez utiliser des crochets dans un shortcode, l'utilisation des entités ASCII html respectives les échappe.

C'est-à-dire remplacer [ par [et ] par ]. Wordpress ne reconnaîtra pas ]la fin du shortcode.

La question de savoir si cela sert votre objectif dépend évidemment de sa conversion en ] avant d'être transmise à l'API Google Maps ou si l'API la gère comme prévu. Je n'ai aucune expérience avec ça, donc je ne peux pas dire.


Merci pour votre réponse. Dans ma question, j'ai oublié de mettre '& # 93;' dans un bloc de code, il est donc sorti sous la forme d'un "]". J'ai édité ma question. L'entité HTML fonctionne pour WP, mais pas pour Google Maps. Je vais devoir utiliser Regex pour remplacer les entités HTML. Merci beaucoup pour l'aide.
Laxmidi

@Laxmidi Ma "supposition" ci-dessus qu'il n'y a pas de caractère d'échappement aux frontières de la certitude - je voulais juste être prudent pour ne pas fournir de désinformation. Si c'était le cas, je suis certain que l'article du codex sur l' API Shortcode le mentionnerait. Je pense que le remplacement par la suite est votre meilleur pari. Avez-vous besoin d'une expression régulière pour un personnage? Je pense que cela str_replace()devrait aussi faire le travail. Ce serait moins gourmand en ressources, si c'était le cas.
Johannes Pille

1
@JohannesPille bonjour c'est un oldie, mais je dois aussi faire remplacer le [] par & # 93 ;. Première sauvegarde dans WP et cela fonctionne, mais lors de la modification du post / page WP tourne & # 93; en]. (besoin de cela pour un suivi des événements google sur les boutons de shortcode) salutations
alex

Comme l'a dit @alex, si vous passez à l'onglet visuel et revenez à l'onglet de code, vous verrez que tinyMCE remet les caractères spéciaux en [], puis casse le code.
Saulo Padilha


2

Sur la base de la réponse de Johannes Pille, il existe une fonction wp pour échapper aux crochets pour l'utilisation de texte dans les paramètres de shortcode:

function my_esc_brackets($text = ''){
    return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}

Souvent, les gens suggèrent d'utiliser le contenu $ du shortcode pour les paramètres de texte, mais il y a des cas où le shortcode a beaucoup de tels paramètres de texte.


2

Il semble y avoir une page officielle ici: Escaping Shortcodes

Extrait :

Pour ce faire, vous devez échapper au shortcode en utilisant deux ensembles de crochets au lieu d'un seul. Donc, pour afficher cela dans votre message:

[Galerie]

Vous écririez ceci:

[[Galerie]]


0

Même si vous ne jouez PAS avec l'URL, utilisez urldecode (votre valeur_attribut) avec% 5B et% 5D utilisés en remplacement de [et] dans votre valeur_attribut.

Votre code peut alors ressembler à ceci:

Dans votre page wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Ensuite, dans votre fonction de shortcode, faites simplement ceci:

 $origvalue=urldecode($atts['myattr']);

Cela restaurera les caractères [et] dans $ origvalue, de sorte que $ origvalue contienne maintenant: [myattribute_value]

CONSEIL: Si vous jouez avec l'URL, faites de même, mais ajoutez ce qui suit au code de fonction:

$urlvalue = urlencode($origvalue);

Si ce n'est pas clair: OUI, je fais urlencode (urldecode (une valeur de $ atts)) pour construire une partie correcte d'une URL.

Assez simple, j'espère que cela vous aidera.

Pierre


-1

C'est une vieille question, mais voici une solution de contournement en utilisant CSS. Au lieu des accolades, placez les caractères dans une plage, comme ceci:

<span class="bracket">some string</span>

puis ajoutez ceci à la feuille de style du thème:

span.bracket:before {
  content: '['
}
.colored-blocks span.bracket:after {
  content: ']'
}

le résultat ressemblera à ceci:

[some string]


3
La question porte sur l'insertion ]dans le contenu, et non sur la façon de l'afficher.
Mark Kaplun
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.