¿Cómo escapo un ']' en un código corto?

17

¿Cómo escapo un paréntesis derecho en un código corto?

Estoy trabajando en un complemento de Google Map que tiene puntos codificados. A veces los polígonos tienen el], lo que hace que WP piense que es el final del shortcode.

Por ejemplo:

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

He intentado lo ]que no está causando un problema para WP, pero está causando un problema para mi código de mapa de Google. Podría usar Regex para reemplazar], pero tal vez haya una forma más simple. ¿Shortcode tiene un carácter de escape?

Laxmidi
fuente

Respuestas:

18

No conozco una sintaxis de escape oficial para códigos cortos y probablemente no la haya.

Cuando WordPress analiza los códigos cortos, busca [ y ] . Si desea utilizar corchetes dentro de un código corto, el uso de las respectivas entidades ASCII html se les escapa.

Es decir, reemplazar [ por [y ] por ]. Wordpress no lo reconocerá ]como el final del shortcode.

Si eso sirve a su propósito obviamente depende de si se convierte a ] antes de pasar a la API de Google Maps o si la API lo maneja como se esperaba. No tengo experiencia con eso, así que no puedo decirlo.

Johannes Pille
fuente
Gracias por tu respuesta. En mi pregunta, olvidé poner '& # 93;' en un bloque de código, por lo que salió como un ']'. He editado mi pregunta. La entidad HTML funciona para WP, pero no para Google Maps. Tendré que usar Regex para reemplazar las entidades HTML. Muchas gracias por la ayuda.
Laxmidi
@Laxmidi Mi "conjetura" anterior de que no hay límites de seguridad para los caracteres de escape, solo quería ser cauteloso para no proporcionar información errónea. Si lo hubiera, estoy seguro de que el artículo del codex en la API Shortcode lo mencionaría. Creo que reemplazar después es tu mejor apuesta. ¿Necesitas una expresión regular para un personaje? Creo que str_replace()debería hacer el trabajo también. Sería menos intensivo en recursos, si lo hiciera.
Johannes Pille
1
@JohannesPille hola es un viejo, pero necesito que el [] también sea reemplazado por & # 93 ;. Ahorro por primera vez en WP y funciona, pero al editar la publicación / página, WP cambia & # 93; dentro ]. (Necesito esto para un seguimiento de eventos de Google en botones de shortcode) saludos
alex
Como dijo @alex, si cambia a la pestaña visual y vuelve a la pestaña de código verá que tinyMCE cambia los caracteres especiales de nuevo a [], y luego rompe el código.
Saulo Padilha el
tinyMCE es Javascript y conectable. Eche un vistazo a wpse / preguntas / 223677 / add-custom-text-patterns-in-the-wp-4-5-visual-editor . @alex
Johannes Pille
2

Según la respuesta de Johannes Pille, hay una función wp para escapar de los corchetes para usar texto en parámetros de código corto:

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

A menudo, las personas sugieren usar el contenido $ de shortcode para parámetros de texto, pero hay casos en que el shortcode tiene muchos de estos parámetros de texto.

DocSS
fuente
2

Parece que hay una página oficial aquí: Escaping Shortcodes

Extracto:

Para hacer esto, debe escapar del shortcode utilizando dos conjuntos de corchetes en lugar de solo uno. Para mostrar esto en tu publicación:

[galería]

Escribirías esto:

[[galería]]

Guillaume Husta
fuente
0

Incluso si NO está jugando con url, use urldecode (su atributo_valor) con% 5B y% 5D utilizados como reemplazo de [y] en su atributo_valor.

Su código puede verse así:

En tu página de wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Luego, en su función de shortcode, simplemente haga esto:

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

Esto restaurará los caracteres [y] en $ origvalue, de modo que $ origvalue ahora contiene: [myattribute_value]

SUGERENCIA: si está jugando con url, haga lo mismo, pero agregue lo siguiente al código de función:

$urlvalue = urlencode($origvalue);

Si eso no está claro: SÍ, estoy haciendo urlencode (urldecode (algún valor de $ atts)) para construir una parte correcta de una url.

Muy simple, espero que esto ayude.

Pierre

Pierre13fr
fuente
-1

Esta es una vieja pregunta, pero aquí hay una solución alternativa usando CSS. En lugar de llaves, encierre los caracteres en un espacio, así:

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

luego, agregue esto a la hoja de estilo del tema:

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

el resultado se verá así:

[some string]

yitwail
fuente
3
La pregunta es sobre insertar ]como parte del contenido, no sobre cómo mostrarlo.
Mark Kaplun