WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

do_shortcode()WP 2.5.0

Находит в переданном тексте зарегистрированные шорткоды и обрабатывает их.

Функция обработает только шорткоды, о которых WP знает (которые зарегистрированы как шорткоды). Шорткоды регистрируются с помощью функции add_shortcode(). Т.е. конструкции вида [some_name] не будут удалены или обработаны, если в WordPress не добавлен шорткод some_name.

Если тег шорткода неизвестен, то контент вернется как есть (шорткод в нем не будет обработан). Такое может получиться, например, когда Плагин отключен, но его шорткод используется в контенте.

Читайте обязательно: Шорткоды в WordPress.

С WP 5.4 у это функции появился алиас (точная копия): apply_shortcodes().

1 раз — 0.000387 сек (быстро) | 50000 раз — 0.71 сек (очень быстро) | PHP 7.0.32, WP 5.0.3

Хуков нет.

Возвращает

Строку. Текст, в котором шоткоды обработаны (изменены на вывод прикрепленных к ним функций).

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

do_shortcode( $content, $ignore_html );
$content(строка) (обязательный)
Текст в котором нужно преобразовать шорткоды.
$ignore_html(строка)
Игнорировать ли шорткоды внутри HTML. Если поставить true, то шорткоды внутри HTML обработаны не будут.
По умолчанию: false

Видео с примерами

Примеры

0

#1 Обработает все шорткоды в тексте

Из файла shortcodes.php. Прикрепляет функцию do_shortcode() к фильтру the_content, который срабатывает при выводе контента поста:

add_filter( 'the_content', 'do_shortcode', 11 );
0

#2 Обработка отдельного шорткода

Использование шоткода в PHP файле, за пределами контента, когда нужно получить вывод шоткода отдельно.

Этот пример показывает как обработать шорткод из кода PHP. Например, если нужно вывести шорткод в где-то произвольном месте шаблона.

echo do_shortcode( '[somename]' );

или такой пример:

echo do_shortcode( '[contact-form-7 id="91" title="quote"]' );
0

#3 Контентный шорткод

Использование шоткода в PHP файле, за пределами контента. Для открывающих и закрывающих шорткодов:

echo do_shortcode( '[iscorrect]'. $text_to_be_wrapped_in_shortcode .'[/iscorrect]' );
0

#4 Включение шорткодов в виджете «Текст»

if( ! is_admin() ){
	add_filter( 'widget_text', 'do_shortcode' );
}
0

#5 Обработка только указанного шорткода в контенте

Допустим мы хотим добавить поддержку шорткодов в комментариях, но нам не нужно чтобы там можно было использовать все возможные шорткоды. Нам нужно чтобы там работал только наш шорткод, назовем его [myshort].

Реализовать такую задачу можно оставив зарегистрированным только нужный нам шорткод перед вызовом функции apply_shortcodes(). Все зарегистрированные шорткоды хранятся в глобальной переменной $shortcode_tags.

// Обрабатываем шорткод [myshort] в контенте комментария.
// after wpautop
add_filter( 'comment_text', 'do_shortcodes_in_comment_content', 11, 2 );

function do_shortcodes_in_comment_content( $content, $comm ){

	if( 'comment' === $comm->comment_type ){

		$save = $shortcodes = & $GLOBALS['shortcode_tags'];

		$shortcodes = [ 'myshort' => $shortcodes['myshort'] ];

		$content = apply_shortcodes( $content );

		$shortcodes = $save; // return back
	}

	return $content;
}

Заметки

  • Global. Массив. $shortcode_tags List of shortcode tags and their callback hooks.

Список изменений

С версии 2.5.0 Введена.

Код do_shortcode() WP 6.5.2

function do_shortcode( $content, $ignore_html = false ) {
	global $shortcode_tags;

	if ( ! str_contains( $content, '[' ) ) {
		return $content;
	}

	if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
		return $content;
	}

	// Find all registered tag names in $content.
	preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );

	if ( empty( $tagnames ) ) {
		return $content;
	}

	// Ensure this context is only added once if shortcodes are nested.
	$has_filter   = has_filter( 'wp_get_attachment_image_context', '_filter_do_shortcode_context' );
	$filter_added = false;

	if ( ! $has_filter ) {
		$filter_added = add_filter( 'wp_get_attachment_image_context', '_filter_do_shortcode_context' );
	}

	$content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );

	$pattern = get_shortcode_regex( $tagnames );
	$content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );

	// Always restore square braces so we don't break things like <!--[if IE ]>.
	$content = unescape_invalid_shortcodes( $content );

	// Only remove the filter if it was added in this scope.
	if ( $filter_added ) {
		remove_filter( 'wp_get_attachment_image_context', '_filter_do_shortcode_context' );
	}

	return $content;
}
Danya 50
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
Редакторы: Kama 9616, campusboy 4748
18 комментариев
Полезные 3 Все
    Войти