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.

Приклади

2

#1 Приклад реєстрації шоткоду [footag foo="bar"]:

add_shortcode('footag', 'footag_func');

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

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

#2 Одна функція для кількох шорткодів

Допустимо нам потрібно створити кілька однотипних шорткодів, у яких дозволені одні й самі параметри. Для цього не обов’язково для кожного шорткоду створювати свою функцію 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

#3 Реєстрація шорткоду з контентом

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

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

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

#4 Реєстрація шоткоду для класів

Якщо ваш плагін написаний класом:

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

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

#5 Встановлення білого списку атрибутів шорткоду

Для того щоб шорткод міг мати лише вказані нами параметри і ці параметри мали значення за замовчуванням, потрібно використовувати функцію 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

#6 Вставка 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 не підтримує Iframes.</p></iframe>';
}

// Використання:
// [iframe href="http://www.exmaple.com" height="480" width="640"]
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.0.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. Не використовуйте простих місць або відредаговано characters: %2$s' ),
				$tag,
				'& / < > [ ] ='
			),
			'4.4.0'
		);
		return;
	}

	$shortcode_tags[ $tag ] = $callback;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *