WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

do_shortcode() WP 2.5

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

Функция обработает только шорткоды, о которых 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

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

Примеры

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

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

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

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

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

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

echo do_shortcode( '[somename]' );

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

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

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

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

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

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

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

#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 5.6

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

	if ( false === strpos( $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;
	}

	$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 );

	return $content;
}

Из раздела: Шорткоды

Danya 50
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
Редакторы: Kama 7940
12 комментов
Полезные 2 Вопросы 1 Все
    Войти