Проверка наличия шорткода в контенте WordPress
Функция has_shortcode() позволяет определить, содержится ли в тексте указанный шорткод. Это полезно для выполнения различных действий в зависимости от наличия шорткодов в контенте поста.
Как работает функция
- Вызывается: Функцией
get_post_galleries(). - Время выполнения: 1 раз — 0.000014 сек (очень быстро); 50000 раз — 0.03 сек (супер быстро).
- Требуемая версия PHP: 7.0.8 и WordPress 4.6.1.
Возвращаемое значение
Функци�� возвращает true, если переданный контент содержит указанный шорткод, и false в противном случае.
Использование функции
Вы можете использовать эту функцию следующим образом:
has_shortcode( $content, $tag );
- $content (string) — строка, в которой мы ищем шорткоды (обязательный параметр).
- $tag (string) — имя шорткода, наличие которого мы проверяем (обязательный параметр).
Примеры
Пример 1: Проверка наличия галереи в посте
$content = 'Это текст, возможно переданный через $post->post_content. Он содержит шорткод: .';
if( has_shortcode( $content, 'gallery' ) ) {
// присутствует в тексте.
}
Пример 2: Подключение скриптов в зависимости от наличия шорткода
Если шорткод галереи найден в контенте поста, подключаем JavaScript:
add_action( 'wp_enqueue_scripts', 'custom_shortcode_scripts' );
function custom_shortcode_scripts() {
global $post;
$has_gallery = $post && has_shortcode( $post->post_content, 'gallery' );
if( $has_gallery ) {
wp_enqueue_script( 'custom-script' );
}
}
Пример 3: Перенаправление незарегистрированных пользователей
Если шорткод [only_loggedin_users] присутствует в контенте поста, перенаправляем пользователя на страницу входа:
add_action( 'template_redirect', 'wp_kama_wordpress_doc_head', 5 );
function wp_kama_wordpress_doc_head() {
global $post;
if( is_user_logged_in() ){
return;
}
$do_redirect = $post && has_shortcode( $post->post_content, 'only_loggedin_users' );
if ( $do_redirect ) {
$page = get_page_by_title( 'login' );
wp_redirect( get_permalink( $page->ID ) );
exit;
}
}
Важные заметки
- Функция использует глобальный массив
$shortcode_tags, чтобы определить, существует ли указанное имя шорткода.
Как функция работает
Функция has_shortcode() ищет шорт код в переданном тексте. Если в тексте есть символ [ (открывающая скобка), она проверяет, существует ли указанный шорткод. Затем функция анализирует весь контент, чтобы найти совпадения. Если находит, возвращает true, если не находит — false.
Вот как выглядит код функции:
function has_shortcode( $content, $tag ) {
if ( ! str_contains( $content, '[' ) ) {
return false;
}
if ( shortcode_exists( $tag ) ) {
preg_match_all( '/' . get_shortcode_regex() . '/', $content, $matches, PREG_SET_ORDER );
if ( empty( $matches ) ) {
return false;
}
foreach ( $matches as $shortcode ) {
if ( $tag === $shortcode[2] ) {
return true;
} elseif ( ! empty( $shortcode[5] ) && has_shortcode( $shortcode[5], $tag ) ) {
return true;
}
}
}
return false;
}
В этой функции:
- Сначала проверяется, есть ли хоть один шорткод в тексте.
- Затем, если шорткод существует, выполняется поис�� совпадений.
- Результат: возвращает
trueилиfalseв зависимости от наличия указанного шорткода.
Теперь вы знаете, как использовать функцию has_shortcode() в WordPress и на что она способна. Это делает процесс разработки более эффективным и позволяет добавлять функциональность вашего сайта, проверяя наличие шорткодов в контенте постов.