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

add_shortcode() WP 2.5

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

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

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

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

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

Результат функции-обработчика шоткода всегда должен возвращаться, а не выводиться на экран.

Хуков нет.

Возвращает

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

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

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

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

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

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

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

Функция получает 3 параметра, каждый из них может быть передан, а может нет:

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

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

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

Примеры

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

add_shortcode( 'footag', 'footag_func' );

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

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

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

Для того чтобы шорткод мог иметь только указанные нами параметры и у этих параметров были значения по умолчанию, нужно использовать функцию 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']}";
}

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

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

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

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

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

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

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

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

#4 Вставка 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"]

#5 Вывод записи по 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;
}

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

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

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"]

Заметки

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

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

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

Код add_shortcode() WP 5.8.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 8492, campusboy 3921
34 коммента
Полезные 7 Вопросы 2 Все
    Войти