Come si fa a scappare una ']' in uno shortcode?
Come si fa a scappare una parentesi quadra chiusa in uno shortcode?
Sto lavorando a un plugin per Google Map che ha punti codificati. A volte i poligoni contengono il carattere ], che fa pensare a WordPress che sia la fine dello shortcode.
Per esempio:
[my_shortcode latitude='36.93' longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]
Ho provato ]
che non crea problemi a WordPress, ma crea problemi al mio codice di Google Maps. Potrei usare Regex per sostituire ], ma forse c'è un modo più semplice. Lo shortcode ha un carattere di escape?

Non sono a conoscenza di una sintassi ufficiale per l'escape degli shortcode e probabilmente non esiste.
Quando WordPress analizza il contenuto alla ricerca di shortcode, cerca i caratteri [ e ]. Se vuoi usare parentesi quadre all'interno di uno shortcode, puoi utilizzare le rispettive entità HTML ASCII per fare l'escape.
Ad esempio, sostituendo [ con [
e ] con ]
. WordPress non riconoscerà ]
come la fine di uno shortcode.
Se questo sia utile per il tuo scopo dipende ovviamente dal fatto che venga convertito in ] prima di essere passato all'API di Google Maps o se l'API lo gestisca come previsto. Non ho esperienza diretta con questo aspetto, quindi non posso dirlo con certezza.

Grazie per la tua risposta. Nella mia domanda, ho dimenticato di inserire ']' in un blocco di codice quindi è uscito come ']'. Ho modificato la mia domanda. L'entità HTML funziona per WP, ma non per Google Maps. Dovrò usare Regex per sostituire le entità HTML. Grazie mille per l'aiuto.

@Laxmidi La mia "supposizione" sopra che non ci sia un carattere di escape è quasi una certezza - volevo solo essere cauto per non fornire informazioni errate. Se ci fosse, sono sicuro che l'articolo del codex sull'Shortcode API lo menzionerebbe. Penso che sostituire dopo sia la tua migliore opzione. Hai davvero bisogno di una regex per un singolo carattere però? Credo che str_replace()
possa fare al caso tuo. Sarebbe meno dispendioso in termini di risorse, se funzionasse.

@JohannesPille ciao, è un po' vecchiotto, ma ho bisogno di sostituire anche [ ] con ]. La prima volta che salvo in WP funziona, ma quando modifico il post/pagina WP trasforma ] in ]. (mi serve per il tracciamento degli eventi di Google sui pulsanti degli shortcode) saluti

Come ha detto @alex, se passi alla scheda visuale e poi torni alla scheda codice vedrai che tinyMCE ripristina i caratteri speciali a [ ], rompendo così il codice.

tinyMCE è Javascript e pluggable. Dai un'occhiata a wpse/questions/223677/adding-custom-text-patterns-in-the-wp-4-5-visual-editor. @alex

Sembra esserci una pagina ufficiale qui: Escaping Shortcodes
Estratto:
Per fare questo, è necessario eseguire l'escape dello shortcode utilizzando due coppie di parentesi invece di una sola. Quindi per visualizzare questo nel tuo articolo:
[gallery]
Dovresti scrivere questo:
[[gallery]]

Sì ma no. Dalla stessa fonte: Nota che solo gli shortcode attualmente disponibili possono essere evitati in questo modo. Utilizzare doppie parentesi quadre attorno a un testo che non è attualmente registrato come shortcode comporterà la visualizzazione di entrambe le serie di parentesi nel tuo articolo, non solo una come avviene quando si evitano shortcode registrati.

Basandosi sulla risposta di Johannes Pille, esiste una funzione wp per evitare le parentesi quadre quando si utilizza del testo nei parametri degli shortcode:
function my_esc_brackets($text = ''){
return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}
Spesso si suggerisce di utilizzare il parametro $content degli shortcode per i testi, ma ci sono casi in cui lo shortcode ha molti parametri di testo.

Anche se NON stai lavorando con URL, usa urldecode(tuo_valore_attributo) con %5B e %5D usati come sostituti di [ e ] nel tuo_valore_attributo.
Il tuo codice potrebbe quindi apparire così:
Nella tua pagina wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]
Poi, nella tua funzione shortcode, fai semplicemente questo:
$origvalue=urldecode($atts['myattr']);
Questo ripristinerà i caratteri [ e ] in $origvalue, in modo che $origvalue ora contenga: [myattribute_value]
SUGGERIMENTO: Se stai lavorando con URL, fai lo stesso, ma aggiungi il seguente codice alla funzione:
$urlvalue = urlencode($origvalue);
Se non è chiaro: SÌ, sto facendo urlencode(urldecode(valore da $atts)) per costruire una parte corretta di un URL.
Abbastanza semplice, spero che questo aiuti.
Pierre

La soluzione più semplice - se è necessario eseguire l'escape di un solo attributo - è utilizzare gli shortcode nella versione con tag di apertura/chiusura in questo modo:
[my_shortcode latitude='36.93' longitude='-72.98']ortlF~g]tM?cZEH`z]}|@DQfi][/my_shortcode]
in questo modo riceverai il contenuto problematico come secondo argomento $content
(il primo è $attr
).
Puoi consultare la documentazione per maggiori informazioni su questo argomento.

Questa è una vecchia domanda, ma ecco una soluzione alternativa utilizzando CSS. Invece delle parentesi graffe, racchiudi i caratteri in uno span, in questo modo:
<span class="bracket">some string</span>
poi, aggiungi questo al foglio di stile del tema:
span.bracket:before {
content: '['
}
.colored-blocks span.bracket:after {
content: ']'
}
il risultato apparirà così:
[some string]
