Проверка наличия шорткода в контенте WordPress

Проверка наличия шорткода в контенте 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 и на что она способна. Это делает процесс разработки более эффективным и позволяет добавлять функциональность вашего сайта, проверяя наличие шорткодов в контенте постов.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *