¿Cómo escapar un ']' en un shortcode?

17 nov 2011, 07:18:50
Vistas: 15.6K
Votos: 22

¿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?

0
Todas las respuestas a la pregunta 6
6
22

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.

17 nov 2011 10:03:49
Comentarios

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

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

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

@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

alex alex
18 oct 2013 09:31:22

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.

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

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

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

Lo mismo aplica para @SauloPadilha

Johannes Pille Johannes Pille
10 nov 2019 05:10:31
Mostrar los 1 comentarios restantes
1

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

20 nov 2018 18:09:36
Comentarios

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.

stackoverflowed stackoverflowed
22 nov 2021 17:20:56
0

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.

11 mar 2017 17:23:29
0

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

26 dic 2017 14:25:25
0

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.

19 mar 2021 15:17:39
1
-1

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]

21 sept 2014 05:07:30
Comentarios

La pregunta es sobre insertar ] como parte del contenido, no sobre cómo mostrarlo.

Mark Kaplun Mark Kaplun
12 abr 2016 14:57:38