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. |