Come posso evitare un ']' in un codice funzione?


17

Come posso evitare una parentesi destra in un codice funzione?

Sto lavorando a un plug-in di Google Map che ha punti codificati. A volte i poligoni hanno la] in esso, il che rende WP pensare che è la fine del shortcode.

Per esempio:

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

Ho provato ]che non sta causando un problema per WP, ma sta causando un problema per il mio codice mappa di Google. Potrei usare Regex per sostituire], ma forse c'è un modo più semplice. Ha shortcode hanno un carattere di escape?

Risposte:


18

Non conosco una sintassi di escape ufficiale per i codici brevi e probabilmente non ce n'è uno.

Quando wordpress analizza i codici brevi cerca [ e ] . Se si desidera utilizzare parentesi quadre all'interno di uno shortcode, utilizzando le rispettive entità html ASCII le si sfugge.

Ossia di sostituire [ da [e ] da ]. Wordpress non riconoscerà ]come la fine del shortcode.

Sia che serve il vostro scopo, ovviamente, dipende dal fatto che esso viene convertito in ] prima di essere passato alle API di Google Maps o se le maniglie API come previsto. Non ho esperienza con questo, quindi non posso dire.


Grazie per la tua risposta. Nella mia domanda, ho dimenticato di mettere "& # 93;" in un blocco di codice così è 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,

@Laxmidi Il mio precedente "indovina" che non ci sono confini di certezza sul carattere di fuga - volevo solo essere cauto per non fornire disinformazione. In tal caso, sono sicuro che l'articolo del codice sull'API Shortcode lo menzionerebbe. Penso che sostituire in seguito sia la soluzione migliore. Hai bisogno di una regex per un personaggio però? Penso che str_replace()dovrebbe fare anche il lavoro. In caso contrario, sarebbe meno dispendioso in termini di risorse.
Johannes Pille,

1
@JohannesPille ciao è un vecchio, ma ho bisogno che il [] sia anche sostituito da & # 93 ;. La prima volta che si salva in WP e funziona, ma quando si modifica il post / pagina WP diventa & # 93; in]. (ne ho bisogno per il tracciamento di un evento google sui pulsanti shortcode) saluti
alex

Come ha detto @alex, se passi alla scheda visuale e ritorni alla scheda del codice vedrai che tinyMCE riporta i caratteri speciali in [], quindi spezza il codice.
Saulo Padilha,


2

Sulla base della risposta di Johannes Pille esiste la funzione wp per sfuggire alle parentesi quadre per l'utilizzo del testo nei parametri shortcode:

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

Spesso le persone suggeriscono di utilizzare $ content dello shortcode per i parametri di testo, ma ci sono casi in cui lo shortcode ha molti di questi parametri di testo.


2

Sembra che ci sia una pagina ufficiale qui: Escaping Shortcodes

Estratto :

Per fare ciò, è necessario sfuggire allo shortcode utilizzando due set di parentesi anziché solo uno. Quindi per visualizzarlo nel tuo post:

[galleria]

Scriveresti questo:

[[galleria]]


0

Anche se NON stai giocando con url, usa urldecode (valore_attributo) con% 5B e% 5D usati in sostituzione di [e] nel tuo valore_attributo.

Il tuo codice potrebbe quindi apparire così:

Nella tua pagina wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Quindi, nella funzione shortcode, basta fare questo:

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

Ciò ripristinerà i caratteri [e] in $ origvalue, in modo che $ origvalue ora contenga: [myattribute_value]

SUGGERIMENTO: se stai giocando con url, fai lo stesso, ma aggiungi quanto segue al codice funzione:

$urlvalue = urlencode($origvalue);

Se ciò non è chiaro: SÌ, sto facendo urlencode (urldecode (un valore da $ atts)) per costruire una parte corretta di un url.

Abbastanza semplice, spero che questo aiuti.

Pierre


-1

Questa è una vecchia domanda, ma ecco una soluzione alternativa usando css. Al posto delle parentesi graffe, racchiudi i personaggi in un arco, in questo modo:

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

quindi, aggiungilo al foglio di stile del tema:

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

il risultato sarà simile al seguente:

[some string]


3
La domanda riguarda l'inserimento ]come parte del contenuto, non su come visualizzarlo.
Mark Kaplun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.