¿Cómo escapar un ']' en un shortcode?
¿Cómo escapar un corchete derecho en un shortcode?
Estoy trabajando en un plugin de Google Maps que tiene puntos codificados. A veces los polígonos contienen el carácter ], 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 probado con ]
lo cual no causa problemas para WP, pero sí para mi código de Google Maps. Podría usar Regex para reemplazar ], pero quizás exista una forma más simple. ¿Tiene el shortcode algún carácter de escape?

No conozco una sintaxis oficial de escape para shortcodes y probablemente no exista una.
Cuando WordPress analiza los shortcodes, busca los caracteres [ y ]. Si deseas usar corchetes dentro de un shortcode, puedes escapar los caracteres utilizando las respectivas entidades ASCII HTML.
Es decir, reemplazando [ por [
y ] por ]
. WordPress no reconocerá ]
como el cierre del shortcode.
Si esto sirve para tu propósito dependerá de si se convierte a ] antes de pasarse a la API de Google Maps o si la API lo maneja como se espera. No tengo experiencia con eso, así que no puedo decirlo con certeza.

Gracias por tu respuesta. En mi pregunta, olvidé poner ']' en un bloque de código así que apareció como ']'. 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 Mi "suposición" anterior de que no hay un carácter de escape raya en la certeza - solo quería ser cauteloso para no proporcionar información errónea. Si lo hubiera, estoy seguro de que el artículo del codex sobre la API de Shortcode lo mencionaría. Creo que reemplazar después es tu mejor opción. ¿Necesitas realmente un regex para un solo carácter? Pienso que str_replace()
podría hacer el trabajo también. Sería menos intensivo en recursos, si funciona.

@JohannesPille hola, es algo antiguo, pero necesito reemplazar los [ ] también por ]. La primera vez que se guarda en WP funciona, pero al editar el post/página WP convierte ] en ]. (necesito esto para un seguimiento de eventos de Google en botones de shortcode) saludos

Como dijo @alex, si cambias a la pestaña visual y regresas a la pestaña de código, verás que tinyMCE cambia los caracteres especiales de vuelta a [ ], lo que rompe el código.

tinyMCE es Javascript y es pluggable. Echa un vistazo a wpse/questions/223677/adding-custom-text-patterns-in-the-wp-4-5-visual-editor. @alex

Parece que hay una página oficial aquí: Escapando Shortcodes
Extracto:
Para hacer esto, necesitas escapar el shortcode usando dos conjuntos de corchetes en lugar de solo uno. Entonces, para mostrar esto en tu publicación:
[gallery]
Escribirías esto:
[[gallery]]

Sí pero no. De la misma fuente: Ten en cuenta que solo los shortcodes que están actualmente disponibles pueden escaparse de esta manera. Usar dobles corchetes alrededor de un texto que no está registrado como shortcode actualmente hará que ambos conjuntos de corchetes se muestren en tu publicación, no solo uno como cuando escapas shortcodes registrados.

Basado en la respuesta de Johannes Pille, existe una función de WordPress para escapar los corchetes y usar texto en parámetros de shortcode:
function my_esc_brackets($text = ''){
return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}
A menudo, la gente sugiere usar el $content del shortcode para parámetros de texto, pero hay casos en los que el shortcode tiene muchos de estos parámetros de texto.

Incluso si NO estás trabajando con URLs, usa urldecode(tu_valor_atributo) con %5B y %5D como reemplazo de [ y ] en tu_valor_atributo.
Tu código podría verse así:
En tu página de WordPress: [my_shortcode myattr="%5Bmyattribute_value%5D"]
Luego, en tu función de shortcode, simplemente haz esto:
$origvalue = urldecode($atts['myattr']);
Esto restaurará los caracteres [ y ] en $origvalue, de modo que $origvalue ahora contendrá: [myattribute_value]
CONSEJO: Si estás trabajando con URLs, haz lo mismo pero añade lo siguiente al código de la función:
$urlvalue = urlencode($origvalue);
Por si no queda claro: SÍ, estoy haciendo urlencode(urldecode(algún_valor_de $atts)) para construir una parte correcta de una URL.
Bastante simple, espero que esto ayude.
Pierre

La solución más sencilla - si solo se necesita escapar un atributo - es utilizar shortcodes en la versión de etiqueta de apertura/cierre de esta manera:
[my_shortcode latitude='36.93' longitude='-72.98']ortlF~g]tM?cZEH`z]}|@DQfi][/my_shortcode]
Así obtienes tu contenido problemático como el segundo argumento $content
(el primero es $attr
).
Puedes consultar la documentación para obtener más información.

Esta es una pregunta antigua, pero aquí hay una solución alternativa usando CSS. En lugar de llaves, encierra los caracteres en un span, así:
<span class="bracket">algún texto</span>
Luego, agrega esto a la hoja de estilos del tema:
span.bracket:before {
content: '['
}
.colored-blocks span.bracket:after {
content: ']'
}
El resultado se verá así:
[algún texto]
