Cum să scapez un caracter ']' într-un shortcode?

17 nov. 2011, 07:18:50
Vizualizări: 15.6K
Voturi: 22

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?

0
Toate răspunsurile la întrebare 6
6
22

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.

17 nov. 2011 10:03:49
Comentarii

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 Laxmidi
17 nov. 2011 19:47:10

@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.

Johannes Pille Johannes Pille
17 nov. 2011 19:55:31

@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

alex alex
18 oct. 2013 09:31:22

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.

Saulo Padilha Saulo Padilha
9 nov. 2019 04:43:55

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

Johannes Pille Johannes Pille
10 nov. 2019 05:10:16

La fel se aplică și pentru @SauloPadilha

Johannes Pille Johannes Pille
10 nov. 2019 05:10:31
Arată celelalte 1 comentarii
1

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]]

20 nov. 2018 18:09:36
Comentarii

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.

stackoverflowed stackoverflowed
22 nov. 2021 17:20:56
0

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.

11 mar. 2017 17:23:29
0

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

26 dec. 2017 14:25:25
0

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.

19 mar. 2021 15:17:39
1
-1

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]

21 sept. 2014 05:07:30
Comentarii

Întrebarea este despre inserarea ] ca parte a conținutului, nu despre cum să-l afișezi.

Mark Kaplun Mark Kaplun
12 apr. 2016 14:57:38