Cum să scapez un caracter ']' într-un shortcode?
Cum pot să scapez un parantez dreaptă (]) într-un shortcode?
Lucrez la un plugin pentru Google Maps care are puncte codificate. Uneori, poligoanele conțin caracterul ], ceea ce face ca WordPress să creadă că acesta este sfârșitul shortcode-ului.
De exemplu:
[my_shortcode latitude='36.93' longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]
Am încercat ]
care nu provoacă probleme pentru WordPress, dar creează probleme pentru codul meu de hartă Google. Aș putea folosi Regex pentru a înlocui ], dar poate există o cale mai simplă. Există vreun caracter de escape pentru shortcode-uri?

Nu cunosc o sintaxă oficială de escapare pentru shortcode-uri și probabil nu există una.
Când WordPress analizează shortcode-urile, caută [ și ]. Dacă doriți să utilizați paranteze drepte într-un shortcode, puteți folosi entitățile HTML ASCII respective pentru a le scăpa.
Adică înlocuind [ cu [
și ] cu ]
. WordPress nu va recunoaște ]
ca sfârșitul shortcode-ului.
Dacă această soluție vă este utilă depinde de faptul dacă este convertită în ] înainte de a fi transmisă către API-ul Google Maps sau dacă API-ul o procesează corect. Nu am experiență cu acest aspect, așa că nu pot spune.

Mulțumesc pentru răspuns. În întrebarea mea, am uitat să pun ']' într-un bloc de cod, așa că a apărut ca ']'. Am editat întrebarea mea. Entitatea HTML funcționează pentru WP, dar nu și pentru Google Maps. Va trebui să folosesc Regex pentru a înlocui entitățile HTML. Vă mulțumesc foarte mult pentru ajutor.

@Laxmidi Presupunerea mea de mai sus că nu există un caracter de escape este aproape sigură - voiam doar să fiu prudent pentru a nu oferi informații greșite. Dacă ar fi existat, sunt sigur că articolul din codex despre Shortcode API l-ar fi menționat. Cred că înlocuirea ulterioară este cea mai bună opțiune. Ai nevoie totuși de un regex pentru un singur caracter? Cred că str_replace()
ar putea face treaba la fel de bine. Ar fi mai puțin solicitant din punct de vedere al resurselor, dacă ar funcționa.

@JohannesPille salutări, este o întrebare veche, dar trebuie să înlocuiesc și [ ] cu ]. Prima dată când salvez în WP funcționează, dar când editez postul/pagina WP transformă ] în ]. (am nevoie de asta pentru urmărirea evenimentelor Google pe butoanele cu shortcode) salutări

După cum a spus @alex, dacă treci la fila vizuală și revii la fila de cod, vei vedea că tinyMCE schimbă caracterele speciale înapoi la [ ], ceea ce strică codul.

tinyMCE este Javascript și extensibil. Aruncă o privire la wpse/questions/223677/adding-custom-text-patterns-in-the-wp-4-5-visual-editor. @alex

Se pare că există o pagină oficială aici: Escaparea Shortcode-urilor
Extras:
Pentru a face acest lucru, trebuie să escapați shortcode-ul folosind două seturi de paranteze pătrate în loc de unul singur. Deci, pentru a afișa asta în postarea dvs.:
[gallery]
Ați scrie astfel:
[[gallery]]

Da, dar nu. Din aceeași sursă: Rețineți că doar shortcode-urile care sunt în prezent disponibile pot fi evitate în acest fel. Folosirea dublu parantezelor peste un text care nu este înregistrat în prezent ca un shortcode va avea ca rezultat afișarea ambelor seturi de paranteze în postarea ta, nu doar una ca în cazul shortcode-urilor înregistrate.

Bazat pe răspunsul lui Johannes Pile, există o funcție WordPress pentru a escapa parantezele pătrate atunci când folosești text în parametrii shortcode-urilor:
function my_esc_brackets($text = ''){
return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}
Deseori oamenii sugerează utilizarea $content din shortcode pentru parametrii de tip text, dar există cazuri în care shortcode-ul are mulți astfel de parametri text.

Chiar dacă NU manipulezi URL-uri, folosește urldecode(valoarea_atributului_tău) cu %5B și %5D folosite ca înlocuitori pentru [ și ] în valoarea_atributului_tău.
Codul tău ar putea arăta astfel:
În pagina ta wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]
Apoi, în funcția ta de shortcode, fă doar asta:
$origvalue=urldecode($atts['myattr']);
Aceasta va restaura caracterele [ și ] în $origvalue, astfel încât $origvalue va conține acum: [myattribute_value]
SFAT: Dacă lucrezi cu URL-uri, procedează la fel, dar adaugă următoarele în codul funcției:
$urlvalue = urlencode($origvalue);
Dacă nu este clar: DA, folosesc urlencode(urldecode(o_valoare_din_$atts)) pentru a construi o parte corectă a unui URL.
Destul de simplu, sper că acest lucru te ajută.
Pierre

Cea mai ușoară soluție - dacă trebuie escapat doar un singur atribut - este să folosiți shortcode-uri în versiunea cu taguri deschise/închise, astfel:
[my_shortcode latitude='36.93' longitude='-72.98']ortlF~g]tM?cZEH`z]}|@DQfi][/my_shortcode]
Apoi veți primi conținutul problematic ca al doilea argument $content
(primul fiind $attr
).
Puteți consulta documentația pentru a obține mai multe informații.

Aceasta este o întrebare veche, dar iată o soluție folosind CSS. În loc de acolade, includeți caracterele într-un span, astfel:
<span class="bracket">un șir de caractere</span>
apoi, adăugați acest cod în fișierul de stiluri al temei:
span.bracket:before {
content: '['
}
.colored-blocks span.bracket:after {
content: ']'
}
rezultatul va arăta astfel:
[un șir de caractere]
