Intereting Posts
Незнакомые свойства HTML в авадах и Divi Темы Как добавить класс к родительскому тегу с подменю Получить текущий день недели и время вне цикла Изменение цвета фона латекса $ латекс в глобальном масштабе Как записать условный флажок для персонализированного флажка в метаданных с установленным изображением Показать количество сообщений Как выбрать одну основную категорию (или пользовательскую таксономию) для настраиваемого типа сообщений? Как добавить подменю в плагин WordPress в том же каталоге основного плагина? проблемы с wordpress и php версии 5.3.3-1 Петля 3 столбца столбца и продолжайте цикл в те же столбцы WordPress как поставщик OAuth Сортировка по измененной дате и настраиваемому полю, не работающему в запросе wp Могу ли я иметь 2 отдельных Галереи на 2 отдельных страницах, каждый из которых идет в РАЗЛИЧНЫЙ файл Attachment.php? Веб-сайт DR с использованием Multisite Панель администратора – отключить перемещение выбранных терминов в начало Metabox

Поиск содержимого для коротких кодов и получение параметров

В содержании у меня может быть несколько коротких кодов, таких как [book id="1"] [book id="14" page="243"]

Есть ли какой-либо метод помощи, с помощью которого я могу искать контент для этого короткого кода и получать его параметры? Мне нужно получить идентификаторы, чтобы я мог вызвать WP_Query и добавить заголовки пользовательских сообщений в конце.

 function filter_books( $content ) { // get all shortcodes IDs and other parameters if they exists ... return $content; } add_filter( 'the_content', 'filter_books', 15 ); 

Я попытался использовать следующий код, но var_dump ($ matches) пуст, и если он будет работать, я не уверен, как мне получить параметры ( https://stackoverflow.com/questions/23205537/wordpress-shortcode-filtering-the-content- изменяет-все-в-в-списке )

  $shortcode = 'book'; preg_match('/\['.$shortcode.'\]/s', $content, $matches); 

Solutions Collecting From Web of "Поиск содержимого для коротких кодов и получение параметров"

Это работает для меня

  $shortcode = 'book'; $pattern = get_shortcode_regex(); // if shortcode 'book' exists if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) && array_key_exists( 2, $matches ) && in_array( $shortcode, $matches[2] ) ) { $shortcode_atts = array_keys($matches[2], $shortcode); // if shortcode has attributes if (!empty($shortcode_atts)) { foreach($shortcode_atts as $att) { preg_match('/id="(\d+)"/', $matches[3][$att], $book_id); // fill the id into main array $book_ids[] = $referenca_id[1]; } } ... 

на самом деле существует гораздо более простой способ достичь этого. Когда контент анализируется WP, он выполняет короткие коды, которые он находит в контенте. Начиная с WP 4.7 новый фильтр, do_shortcode_tag запускается, когда короткий код заменяется его содержимым. Это действительно полезно для добавления дополнительного контента в вывод короткого кода на основе найденных атрибутов,

 add_filter( 'do_shortcode_tag','add_my_script',10,3); function enqueue_my_script($output, $tag, $attr){ if('aShortcode' != $tag){ //make sure it is the right shortcode return $output; } if(!isset($attr['id'])){ //you can even check for specific attributes return $output; } $output.='<script> ... </script>'; return $output; } 

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