Intereting Posts
Узнайте, какой модератор одобрил комментарий? Как использовать / получить массив параметров с настройками по умолчанию, используя get_option () Пользовательская регистрация переднего конца – как работает ключ в запросе набора пароля? Как отображать сообщения из нескольких типов сообщений в случайном порядке в wordpress? Переадресация wp-admin 302 Родитель CPT на страницу Как клонировать все конечные точки API WordPress Rest Можно ли добавить первую и последнюю ссылку на сообщения? Пользовательский тип дублирования сообщений для новых сообщений Выберите событие, в котором дата начала меньше текущей даты, а дата окончания больше текущей даты Создание «категории» признанных должностей Цикл WordPress для вывода 4 страниц / сообщений по ID Пользовательский тип сообщения: установите post_title равным произвольному типу почтового типа Добавить функцию для добавления элемента на всех страницах Неустранимая ошибка WordPress

Вложенное обнаружение коротких кодов

Если вы знакомы с этим кодом

<?php $pattern = get_shortcode_regex(); preg_match('/'.$pattern.'/s', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == 'YOURSHORTCODE') { //shortcode is being used } ?> 

с этого сайта, но он не работает для вложенных коротких кодов.

Кто-нибудь знает, как заставить его работать для вложенных коротких кодов?

Solutions Collecting From Web of "Вложенное обнаружение коротких кодов"

От: http://codex.wordpress.org/Shortcode_API#Limitations

Парсер коротких кодов правильно обрабатывает вложенные макросы shortcode, если их функции обработчика поддерживают его рекурсивным вызовом do_shortcode ()

Это не позволит вам вложить один и тот же код в другой, хотя:

Однако анализатор не будет работать, если макрокоманда короткого кода используется для добавления другого макроса с тем же именем

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

 function paragraph_wrap($atts, $content) { // if there are nested shortcodes - handle them $content = do_shortcode($content); // wrap content in a paragraph tag $paragraphed = '<p>' . $content . '</p>'; return $paragraphed; } add_shortcode('wrap_p', 'paragraph_wrap'); 

Надеюсь это поможет.

Просто догадка. get_shortcode_regex () работает только для зарегистрированных коротких кодов. Поэтому на всякий случай, если вы не зарегистрировали «свой» короткий код, он даже не работает для простых коротких кодов. Так что это может быть – если вы его не зарегистрировали – причина вашей проблемы в конце.

Обработка Shortcode указана в API Shortcode , примеры того, как регистрировать короткие коды, указаны на странице Codex add_shortcode () .

 function baztag_func($atts, $content=) { return "content = $content"; } add_shortcode('baztag', 'baztag_func'); 

Для вложенных кодов Джефф уже ответил, как это работает. Таким образом, это в основном небольшой пример, который показывает, как добавить короткий код. После использования add_shortcode() get_shortcode_regex() вернет регулярное выражение, которое фактически покрывает зарегистрированное имя get_shortcode_regex() . В противном случае он просто не будет соответствовать.

Совпадение коротких кодов выполняется с недостатком (shortcodes.php, ll174). В принципе, регулярные выражения используются для описания того, что должно быть нерегулярным языком (например, shortcodes с произвольным вложением).

В результате,

 [a] [a] [/a] [/a] 

будет анализироваться так, чтобы открывающий тег в строке 1 соответствовал закрывающему тегу в строке 3; очевидно, что это не приводит к желаемому поведению.