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

add_shortcode()WP 2.5.0

Добавляет новый шоткод и хук для него.

Для каждого шоткода может быть создана только одна функция обработчик. А значит, если другой плагин использует такой же шоткод, то ваша функция будет заменена на другую или наоборот (зависит от того в каком порядке подключаются функции).

Функция шорткода должна вернуть данные, а не выводить их - return, а не echo.

Использует глобальную переменную global $shortcode_tags.

Читайте обязательно: Создание шорткода в WordPress

Хуков нет.

Возвращает

null. Ничего не возвращает.

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

add_shortcode( $tag , $func );
$tag(строка) (обязательный)

Название шоткода, который будет использоваться в тексте. Например: 'gallery'.

В названии нельзя использовать пробелы и нестандартные символы вроде: & / < > [ ] =.

$func(строка) (обязательный)

Название функции, которая должна сработать, если найден шоткод.

Функция получает три параметра:

  • $atts(массив)
    Ассоциативный массив атрибутов указанных в шорткоде. Подробнее про атрибуты шорткода.
    По умолчанию: '' (пустая строка - нет атрибутов)

  • $content(строка)
    Текст шорткода, когда используется контентный шорткод: [foo]текст шорткода[/foo]
    По умолчанию: ''

  • $tag(строка)
    Имя шорткода. Передается в хуки. Например, для шорткода [foo], тег будет foo.

Примеры

4

#1 Пример регистрации шоткода [footag foo="bar"]:

add_shortcode( 'footag', 'footag_func' );

function footag_func( $atts ){
	 return "foo = ". $atts['foo'];
}

// результат:
// шоткод [footag foo="bar"] в тексте будет заменен на "foo = bar"
2

#2 Регистрация шоткода для классов

Если ваш плагин написан классом:

add_shortcode( 'baztag', [ 'MyPlugin', 'baztag_func' ] );

class MyPlugin {
	 static function baztag_func( $atts, $content ) {
			return "content = $content";
	 }
}
2

#3 Вставка iframe через шорткод

Этот пример показывает как создать шорткод, чтобы потом через него вставлять iframe.

add_shortcode( 'iframe', 'Generate_iframe' );

function Generate_iframe( $atts ) {
	$atts = shortcode_atts( array(
		'href'   => 'http://example.com',
		'height' => '550px',
		'width'  => '600px',
	), $atts );

	return '<iframe src="'. $atts['href'] .'" width="'. $atts['width'] .'" height="'. $atts['height'] .'"> <p>Your Browser does not support Iframes.</p></iframe>';
}

// использование:
// [iframe href="http://www.exmaple.com" height="480" width="640"]
2

#4 Одна функция для нескольких шорткодов

Допустим нам нужно создать несколько однотипных шорткодов, у которых разрешены одни и те же параметры. Для этого не обязательно для каждого шорткода создавать свою PHP функцию, а можно использовать одну функцию для всех шорткодов.

Чтобы внутри функции понять какой именно шорткод отрабатывает, в функцию шорткода передается третий параметр, в котором содержится название текущего шорткода:

add_shortcode( 'baz-up', 'baz_func' );
add_shortcode( 'baz-down', 'baz_func' );

function baz_func( $atts, $content, $tag ) {

	// какая-то общая логика, например обработка переменных $atts
	$atts = shortcode_atts( array(
		'foo' => 'no foo',
		'baz' => 'default baz'
	), $atts );

	if( 'baz-up' === $tag ){
		$content = 'Конетнт шорткода [baz-up] - ' . $atts['foo'];
	}
	elseif( 'baz-down' === $tag ){
		$content = 'Конетнт шорткода [baz-down] - ' . $atts['foo'];
	}

	return $content;
}
1

#5 Регистрация шорткода с контентом

Пример создания такого шоткода: [baztag]здесь текст[/baztag]:

add_shortcode( 'baztag', 'baztag_func' );
function baztag_func( $atts, $content ) {
	 return "content = $content";
}

// результат:
// конструкция шоткода будет заменена на "content = здесь текст"
0

#6 Установка белого списка атрибутов шорткода

Для того чтобы шорткод мог иметь только указанные нами параметры и у этих параметров были значения по умолчанию, нужно использовать функцию shortcode_atts():

add_shortcode( 'bartag', 'bartag_func' );

function bartag_func( $atts ){
	// белый список параметров и значения по умолчанию
	$atts = shortcode_atts( array(
		'foo' => 'no foo',
		'baz' => 'default baz'
	), $atts );

	return "foo = {$atts['foo']}";
}
0

#7 Вывод записи по ID через шорткод

Получим пост по ID, используя шорткод [testimonials id="272"] в файле темы functions.php.

add_shortcode( 'testimonials', 'testimonials_shortcode_handler' );

function testimonials_shortcode_handler( $atts ){

	global $post;

	$rg = (object) shortcode_atts( [
		'id' => null
	], $atts );

	if( ! $post = get_post( $rg->id ) )
		return '';

	$url = wp_get_attachment_url( get_post_thumbnail_id( $post->ID ) );

	$out = '
	<div class="testimonial">
		<div class="testimonial-img">
			<img src="'. $url .'" />
		</div>
		<div class="testimonial-content">

			<img src="' . esc_attr( $post->logo ) . '" alt="icon" />

			<p class="testimonial_desc">'. get_the_content() .'</p>

			<div class="author-details">
				<img src="' . esc_attr( $post->author_image ) .'" alt="image">
				<p>
					'. esc_html( $post->author_name ) .'
					<span>'. esc_html( $post->author_designation ) .'</span>
				</p>
			</div>
		</div>
	</div>
	';

	wp_reset_postdata();

	return $out;
}
0

#8 Подключение шаблонов темы в шорткоде

Пусть нам надо подключать через шорткод специально подготовленный файл:

add_shortcode( '4cards', 'shortcode_4cards' );

function shortcode_4cards() {
	ob_start();

	/**
	 * Подключает файл по пути:
	 * мой_домен/wp-content/themes/моя_тема/templates/shortcodes/4_cards.php
	 */
	get_template_part( 'templates/shortcodes/4_cards' );

	return ob_get_clean();
}

// Пример вызова шорткода: ``[4cards]``

Благодаря параметрам, которые можно передавать в шорткод, можно предусмотреть динамическое подключение нужного файла из папки. Доработаем пример:

add_shortcode( 'cards', 'shortcode_cards' );

function shortcode_cards( $atts ) {
	ob_start();

	// белый список параметров
	$atts = shortcode_atts( [
		'template' => '',
	], $atts );

	/**
	 * Подключает файл по пути:
	 * мой_домен/wp-content/themes/моя_тема/templates/shortcodes/переданное_имя_файла.php
	 */
	get_template_part( "templates/shortcodes/{$atts['template']}" );

	return ob_get_clean();
}

Примеры вызова шорткода:

# /тема/templates/shortcodes/card-1.php
[cards template="card-1"]

# /тема/templates/shortcodes/card-2.php
[cards template="card-2"]

# /тема/templates/shortcodes/cart-1/block-1.php
[cards template="cart-1/block-1"]
0

#9 Подключение стилей/скриптов только если шорткод есть

Смотрите заметку: Подключение скриптов/стилей, если в контенте есть шорткод.

Заметки

  • Global. Массив. $shortcode_tags

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

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

Код add_shortcode() WP 6.5.2

function add_shortcode( $tag, $callback ) {
	global $shortcode_tags;

	if ( '' === trim( $tag ) ) {
		_doing_it_wrong(
			__FUNCTION__,
			__( 'Invalid shortcode name: Empty name given.' ),
			'4.4.0'
		);
		return;
	}

	if ( 0 !== preg_match( '@[<>&/\[\]\x00-\x20=]@', $tag ) ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: 1: Shortcode name, 2: Space-separated list of reserved characters. */
				__( 'Invalid shortcode name: %1$s. Do not use spaces or reserved characters: %2$s' ),
				$tag,
				'& / < > [ ] ='
			),
			'4.4.0'
		);
		return;
	}

	$shortcode_tags[ $tag ] = $callback;
}
Danya 50
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
Редакторы: Kama 9616, campusboy 4750
26 комментариев
Полезные 7Вопросы 1 Все
    Войти