get_shortcode_regex()
Возвращает регулярное выражение которое используется для поиска шоткодов в тексте.
Эта функция объединяет все зарегистрированные теги шоткодов в одно регулярное выражение.
Хуков нет.
Возвращает
Строку
. Регулярное выражение.
Использование
$pattern = get_shortcode_regex( $tagnames );
- $tagnames(массив) (WP 4.4)
- Список шорткодов, которые нужно найти.
По умолчанию: null (все зарегистрированные шорткоды)
Примеры
#1 Проверим используется ли в посте нужный шоткод
Проверим наличие в тексе шоткода 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()
#2 Проверка наличия шоткода в тексте нескольких постов
Этот пример очень похож на предыдущий, с той лишь разницей, что он позволяет проверить все посты на наличие в их контенте нужного нам шоткода 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; // определили что нужно подключать стили и хорош... } } }
#3 Что возвращает функция
echo get_shortcode_regex(); // выведет примерно такую строку, зависит от зарегистрированных шоткодов // \[(\[?)(embed|wp_caption|caption|gallery|playlist|audio|video)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\])[^\[]*+)*+)\[\/\])?)(\]?)
Этот пример показывает, что вернет функция, если использовать параметр $tagnames.
echo get_shortcode_regex( array('mytag') ); //> \[(\[?)(mytag)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\])[^\[]*+)*+)\[\/\])?)(\]?)
Заметки
- Global. Массив. $shortcode_tags
Список изменений
С версии 2.5.0 | Введена. |
С версии 4.4.0 | Added the $tagnames parameter. |