Как экранировать символ ']' в шорткоде?

17 нояб. 2011 г., 07:18:50
Просмотры: 15.6K
Голосов: 22

Как экранировать закрывающую скобку в шорткоде?

Я работаю с плагином Google Maps, где закодированные точки полигонов могут содержать символ ']', из-за чего WordPress ошибочно воспринимает его как конец шорткода.

Пример:

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

Пробовал использовать ] - это решает проблему для WordPress, но вызывает ошибки в коде Google Maps. Можно конечно использовать Regex для замены, но возможно есть более простое решение. Есть ли в шорткодах специальный символ для экранирования?

0
Все ответы на вопрос 6
6
22

Я не знаю официального синтаксиса экранирования для шорткодов, и, скорее всего, его не существует.

Когда WordPress обрабатывает шорткоды, он ищет символы [ и ]. Если вам нужно использовать квадратные скобки внутри шорткода, вы можете заменить их соответствующими HTML-сущностями ASCII.

То есть заменить [ на [ и ] на ]. WordPress не распознает ] как конец шорткода.

Будет ли это работать для ваших целей, зависит от того, преобразуется ли это обратно в ] перед передачей в API Google Maps или же API корректно обработает такие символы. У меня нет опыта в этом вопросе, поэтому я не могу сказать точно.

17 нояб. 2011 г. 10:03:49
Комментарии

Спасибо за ваш ответ. В моём вопросе я забыл поставить ']' в блоке кода, поэтому отобразилось как ']'. Я отредактировал свой вопрос. HTML-сущность работает для WP, но не для Google Maps. Мне придётся использовать Regex для замены HTML-сущностей. Большое спасибо за помощь.

Laxmidi Laxmidi
17 нояб. 2011 г. 19:47:10

@Laxmidi Моё предположение выше об отсутствии escape-символа граничит с уверенностью — просто хотел быть осторожным, чтобы не ввести в заблуждение. Если бы он был, я уверен, что в статье кодекса про Shortcode API это упоминалось бы. Думаю, замена после обработки — ваш лучший вариант. Но нужен ли вам regex для одного символа? Кажется, str_replace() тоже справится с задачей. Это было бы менее ресурсоёмко, если сработает.

Johannes Pille Johannes Pille
17 нояб. 2011 г. 19:55:31

@JohannesPille привет, это старый вопрос, но мне нужно заменить [ ] также на ]. При первом сохранении в WP это работает, но при редактировании записи/страницы WP превращает ] в ]. (нужно для отслеживания событий Google в кнопках с шорткодами) с уважением

alex alex
18 окт. 2013 г. 09:31:22

Как сказал @alex, если переключиться на визуальную вкладку и вернуться на вкладку с кодом, можно заметить, что tinyMCE преобразует специальные символы обратно в [ ], тем самым ломая код.

Saulo Padilha Saulo Padilha
9 нояб. 2019 г. 04:43:55

tinyMCE — это Javascript и модульный редактор. Посмотрите wpse/questions/223677/adding-custom-text-patterns-in-the-wp-4-5-visual-editor. @alex

Johannes Pille Johannes Pille
10 нояб. 2019 г. 05:10:16

То же самое относится и к @SauloPadilha

Johannes Pille Johannes Pille
10 нояб. 2019 г. 05:10:31
Показать остальные 1 комментариев
1

Похоже, что официальная страница находится здесь: Экранирование шорткодов

Выдержка:

Для этого вам нужно экранировать шорткод, используя двойные квадратные скобки вместо одинарных. Таким образом, чтобы отобразить это в вашем посте:

[gallery]

Вы должны написать так:

[[gallery]]

20 нояб. 2018 г. 18:09:36
Комментарии

Да, но нет. Из того же источника: Обратите внимание, что таким способом можно экранировать только короткие коды, которые в данный момент доступны. Использование двойных скобок вокруг текста, который не зарегистрирован как короткий код, приведёт к отображению обеих пар скобок в вашей записи, а не только одной, как при экранировании зарегистрированных коротких кодов.

stackoverflowed stackoverflowed
22 нояб. 2021 г. 17:20:56
0

На основе ответа Йоханнеса Пилле есть функция WordPress для экранирования квадратных скобок при использовании текста в параметрах шорткода:

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

Часто предлагают использовать $content шорткода для текстовых параметров, но бывают случаи, когда у шорткода много таких текстовых параметров.

11 мар. 2017 г. 17:23:29
0

Даже если вы НЕ работаете с URL, используйте urldecode(ваше_значение_атрибута) с %5B и %5D в качестве замены для [ и ] в вашем значении атрибута.

Ваш код может выглядеть следующим образом:

На вашей странице WordPress: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Затем, в функции шорткода, просто сделайте следующее:

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

Это восстановит символы [ и ] в переменной $origvalue, так что теперь она будет содержать: [myattribute_value]

СОВЕТ: Если вы работаете с URL, делайте то же самое, но добавьте следующий код в функцию:

$urlvalue = urlencode($origvalue);

Если это не понятно: ДА, я использую urlencode(urldecode(некоторое значение из $atts)) для создания корректной части URL.

Довольно просто, надеюсь, это поможет.

Пьер

26 дек. 2017 г. 14:25:25
0

Самый простой вариант - если нужно экранировать только один атрибут, это использовать шорткоды в открывающей/закрывающей версии тега, вот так:

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

Тогда вы получаете проблемное содержимое в виде второго аргумента $content (первый - $attr).

Вы можете ознакомиться с документацией по этому вопросу, чтобы получить больше информации.

19 мар. 2021 г. 15:17:39
1
-1

Это старый вопрос, но вот обходное решение с использованием CSS. Вместо скобок, заключите символы в span, вот так:

<span class="bracket">некоторая строка</span>

затем добавьте это в таблицу стилей темы:

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

результат будет выглядеть так:

[некоторая строка]

21 сент. 2014 г. 05:07:30
Комментарии

Вопрос касается вставки ] как части содержимого, а не того, как его отображать.

Mark Kaplun Mark Kaplun
12 апр. 2016 г. 14:57:38