WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

has_shortcode() WP 3.6

Проверяет есть ли в переданном тексте указанный шоткод.

Шоткод должен быть зарегистрирован через функцию add_shotrcode(), чтобы он был узнаваем.

Используется в: get_post_galleries().
✈ 1 раз = 0.000014с = очень быстро | 50000 раз = 0.03с = скорость света PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

true или false, в зависимости от того найден шоткод в тексте или нет.

Использование

if ( has_shortcode( $content, $tag ) ) {

}
$content(строка) (обязательный)
Текст, который нужно проверить.
По умолчанию: нет
$tag(строка) (обязательный)
Название шоткода, который нужно найти в тексте.
По умолчанию: нет

Примеры

#1. Проверим есть ли в записи галереи

$content = 'Это какой-либо текст, (возможно переданный через $post->post_content).
Он содержит шоткод: [gallery].';

if( has_shortcode( $content, 'gallery' ) ) {
	// [ gallery] есть в переданном тексте.
}

#2. Выборочное подключение скрипта, на основе наличия шоткода в тексте

Подключим нужный нам javascript (custom-script) только если в тексте найден нужный нам шоткод gallery:

add_action( 'wp_enqueue_scripts', 'custom_shortcode_scripts');
function custom_shortcode_scripts() {
	global $post;
	if( has_shortcode( $post->post_content, 'gallery') ) {
		wp_enqueue_script( 'custom-script');
	}
}

Код has shortcode: wp-includes/shortcodes.php VER 4.9.6

<?php
function has_shortcode( $content, $tag ) {
	if ( false === strpos( $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;
}

Cвязанные функции

Из метки: shortcode (шоткод шорткод)

Еще из метки: Условные теги (все)

Еще из раздела: Шорткоды

Danya 47
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
5 комментов
  • @ campusboy2801 cайт: www.youtube.com/c/wpplus

    А как обстоят дела с шорткодами с параметрами? CF7 добавляет на все страницы пару своих скриптов, хочу отменить их загрузку, кроме страницы контактов.

    Ответить2.4 года назад #
    • Kama5395

      Надо в плагине смотреть как там это работает. Я им не пользуюсь... Если везде добавляет, значит в обход шорткода подключается.

      Ответить2.4 года назад #
  • @ Сережа

    Всем привет! Пытаюсь сделать так, чтобы скрипт подключался только если есть шорт-код в комментариях. Как это сделать? Взял за основу код с этой страницы и переделал, но не работает:

    add_filter( 'comment_text', 'do_shortcode' );
    add_action( 'wp_enqueue_scripts', 'custom_shortcode_scripts');
    function custom_shortcode_scripts() {
    	global $comment;
    	if( has_shortcode( $comment->comment_text, 'gallery') ) {
    		wp_enqueue_script( 'custom-script');
    	}
    }

    Что здесь не так?

    Ответить19 дней назад #
    • @ campusboy2801 cайт: www.youtube.com/c/wpplus

      Привет. Может стоит в самом коде вызывать скрипт?

      Ответить19 дней назад #
      • @ Сережа

        Не совсем понял, что значит в самом коде?

        Оригинал кода из статьи, где выполняется проверка шорткода в посте, работает без проблем. Но измененный код для комментариев почему-то не работает. Возможно это из-за того, что по умолчанию шорткоды в комментариях не работают? Но первая строка из моего примера для этого и написала, на странице видно что шорткод срабатывает, но нет скрипта, который подгружаю функцией wp_enqueue_script

        Нигде не удалось найти конструкцию $comment->comment_text - она рабочая или я сам так неудачно придумал? smile

        Ответить18 дней назад #
Здравствуйте, !     Войти . Зарегистрироваться