Intereting Posts
Проблема при установке параметра $ icon_url на WP add_menu_page () Обрабатывать множество изображений внутри медиа-загрузчика / селектора Пользовательский тип сообщения, показывающий одинаковое сообщение на всех страницах Share Custom Post Type в Multisite: как перейти на главный блог на экране редактирования сообщений Проблемы с отключением комментариев для моих страниц статистики Можно ли отфильтровать отображаемое имя для форматов сообщений для отображения в метаданных Formats? Передача параметров на статическую страницу WordPress Как работает «Ваш комментарий ожидает умеренность»? Используя Woocommerce, как мне разделить один продукт на несколько пакетов доставки на основе количества? Откройте Thickbox с контентом через AJAX Атрибут Alt не отображается, пока значение задано в Media Как использовать wp_editor () в форме виджетов? get_categories для настраиваемого типа сообщений и фильтрации по пользовательской таксономии (бренду) и перечислить дочерние категории определенной категории Подсчитать результаты поиска в заголовке «Отправить для обзора» для обновления существующих сообщений

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

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

<?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; очевидно, что это не приводит к желаемому поведению.