Как мне избежать ']' в коротком коде?

17

Как мне избежать правильной скобки в коротком коде?

Я работаю над плагином Google Map, который имеет закодированные точки. Иногда в полигонах есть], что заставляет WP думать, что это конец шорткода.

Например:

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

Я пробовал, ]что не вызывает проблемы для WP, но это вызывает проблему для моего кода карты Google. Я мог бы использовать Regex для замены], но, возможно, есть более простой способ. У шорткода есть escape-символ?

Laxmidi
источник

Ответы:

18

Я не знаю официального синтаксиса escape для коротких кодов, и, скорее всего, его нет.

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

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

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

Йоханнес Пилле
источник
Спасибо за ответ. В моем вопросе я забыл поставить '& # 93;' в блоке кода, так что он вышел как ']'. Я отредактировал свой вопрос. Сущность HTML работает для WP, но не для Google Maps. Мне придется использовать Regex для замены сущностей HTML. Огромное спасибо за помощь.
Лакшмиди
@Laxmidi Выше мое «предположение», что нет границ экранирующего символа с уверенностью - просто хотел быть осторожным, чтобы не дать дезинформации. Если бы это было так, я уверен, что статья о Codex API Shortcode упомянет об этом. Я думаю, что замена потом - ваша лучшая ставка. Вам нужно регулярное выражение для одного персонажа? Я думаю, что str_replace()должна сделать работу также. Было бы менее ресурсоемким, если бы это было.
Йоханнес Пилле
1
@JohannesPille Привет, это старенький, но мне нужно заменить [] на & # 93 ;. Первое время сохранения в WP и все работает, но при редактировании поста / страницы WP получается & # 93; в]. (это нужно для отслеживания Google событий на кнопках SHORTCODE) приветы
AleX
Как сказал @alex, если вы переключитесь на визуальную вкладку и вернетесь к вкладке кода, то увидите, что tinyMCE изменит специальные символы обратно на [], а затем нарушит код.
Сауло Падилья
tinyMCE - это JavaScript и подключаемый модуль. Взгляните на wpse / questions / 223677 / добавление пользовательских текстовых шаблонов в wp-4-5-visual-editor . @alex
Йоханнес Пилле
2

Основываясь на ответе Йоханнеса Пилля, есть функция wp, позволяющая убрать квадратные скобки для использования текста в параметрах шорткода:

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

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

DocSS
источник
2

Кажется, здесь есть официальная страница: Escapeing Shortcodes

Извлечь:

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

[галерея]

Вы бы написали это:

[[галерея]]

Гийом Хуста
источник
0

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

Ваш код может выглядеть так:

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

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

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

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

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

$urlvalue = urlencode($origvalue);

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

Все очень просто, надеюсь, это поможет.

пьер

Pierre13fr
источник
-1

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

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

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

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

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

[some string]

yitwail
источник
3
Речь идет о вставке ]как части контента, а не о том, как его отображать.
Марк Каплун