get_shortcode_regex() WP 2.5.1
Возвращает регулярное выражение которое используется для поиска шоткодов в тексте.
Эта функция объединяет все зарегистрированные теги шоткодов в одно регулярное выражение.
Является основой для:
do_shortcode()
✈ 1 раз = 0.000015с = очень быстро | 50000 раз = 0.07с = скорость света | PHP 7.0.8, WP 4.6.1
Хуков нет.
Возвращает
Строку. Регулярное выражение.
Использование
$pattern = get_shortcode_regex( $tagnames );
- $tagnames(массив)
- Список шорткодов, которые нужно найти. С WP 4.4.
По умолчанию: null (все зарегистрированные шорткоды)
Примеры
#1. Что возвращает функция
echo get_shortcode_regex(); // выведет примерно такую строку, зависит от зарегистрированных шоткодов // \[(\[?)(embed|wp_caption|caption|gallery|playlist|audio|video|code_snippet|democracy|democracy_archives|download)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)
#2 Указываем нужных шоткод
Этот пример показывает, что вернет функция, если использовать параметр $tagnames.
echo get_shortcode_regex( array('mytag') ); //> \[(\[?)(mytag)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)
#3. Проверим используется ли в посте нужный шоткод
Проверим наличие в тексе шоткода your-shortcode и сделаем что-нибудь если используется:
add_action( 'wp', 'your_prefix_detect_shortcode' ); function your_prefix_detect_shortcode(){ global $post; $pattern = get_shortcode_regex(); if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) && array_key_exists( 2, $matches ) && in_array( 'your-shortcode', $matches[2] ) ) { // Шоткод используется } }
Этот пример будет работать, если глобальная переменная $post определена. wp - самое раннее действие, когда мы может это определить.
Для проверки наличия шоткода, также есть специальная функция has_shortcode()
#4. Проверка наличия шоткода в тексте нескольких постов
Этот пример очень похож на предыдущий, с той лишь разницей, что он позволяет проверить все посты на наличие в их контенте нужного нам шоткода videoannotation:
add_action( 'wp', 'your_prefix_detect_shortcode' ); function your_prefix_detect_shortcode(){ global $wp_query; $posts = $wp_query->posts; $pattern = get_shortcode_regex(); foreach ( $posts as $post ){ if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) && array_key_exists( 2, $matches ) && in_array( 'videoannotation', $matches[2] ) ) { // подключаем свой сss и js break; // определили что нужно подключать стили и хорош... } } }
Заметки
- Global. Массив.
$shortcode_tags
Список изменений
С версии 2.5.0 | Введена. |
С версии 4.4.0 | Added the $tagnames parameter. |
Код get shortcode regex:
wp-includes/shortcodes.php
WP 5.3
Cвязанные функции
Из раздела: Шорткоды

А как проверить используется ли на странице функция
do_shortcode($content, $ignore_html)
?