add_shortcode()

Добавляет новый шорткод.

Синтаксис и параметры

Скопировано
add_shortcode( $tag , $func )
Показать код
$tag
Строка. Обязательный. Значение по умолчанию: нет.
Название добавляемого шорткода. В названии нельзя использовать пробелы и следующие спец. символы: & / < > [ ] = или непечатаемые символы от \x00 до \x20. И не рекомендуется использовать одинарные или двойные кавычки.
$func
Функция или массив. Обязательный. Значение по умолчанию: нет.
Имя функции, которая будет вызвана, если в тексте будет найден данный шорткод. Если шорткод используется вместе с классом, то этот параметр может быть массивом.

Возвращаемые значения

Функция ничего не возвращает.

Заметки

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

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

Имена атрибутов шорткода при передаче в функцию всегда преобразуются в строчные буквы. Значения атрибутов при передаче не изменяются.

Функция, которая вызывается шорткодом, никогда не должна выводить на экран какой-либо результат, а только возвращать текст, который будет использоваться для замены шорткода. Иначе это может привести к неожиданным результатам. То есть никакого вывода на экран через echo быть не должно. А если вам такой вывод в вашей функции все же нужен, то оборачивайте его ob_start() и ob_get_clean() (см. примеры ниже).

Примеры

1. Простой шорткод без параметров

Скопировано
add_shortcode( 'test', function() {
	// что-то делаем
	$out = 5;
	return $out;
} );
Показать код

Вызывается так: [test]

2. Шорткод с параметрами

Скопировано
add_shortcode( 'test', function( $atts ) {
	extract( $atts);
	$out = $param1 + $param2;
	return $out;
} );
Показать код

Вызывается так: [test param1=100 param2=200]

Вместо param1 и param2 могут быть любые другие имена параметров. Просто тогда в функции шорткода надо использовать те же имена переменных.

3. Шорткод с параметрами и значениями по умолчанию.

Скопировано
add_shortcode( 'test', function( $atts, $content = null ) {
	extract( shortcode_atts( array(
		'color'		 => 'red',
		'size'		 => 'medium',
		'background' => '#ddd'
	), $atts ) );
	return "<span style='color: $color; font-size: $size; background: $background;'>$content</span>";
} );
Показать код

Вызывать шорткод можно как без параметров [test]выделенный текст[/test], тогда будут использованы параметры по умолчанию, так и с любым количеством используемых параметров (от 1 до 3): [test color="blue"]выделенный текст[/test].

4. Шорткод с выводом на экран.

Скопировано
<?php
add_shortcode( 'test', function() {
	ob_start(); ?>
	<div>
		<p>Вывод на экран чего угодно</p>
	</div> <?
	$out = ob_get_clean();
	return $out;
} );
Показать код

Поскольку внутри функции шорткода нельзя делать вывод на экран напрямую (например, через echo), то мы через буферизацию вывода (PHP функции ob_start() и ob_get_clean()) собираем все, что надо вывести на экран в единый кусок текста и уже его возвращаем из шорткода. Удобно использовать, когда из шорткода надо вернуть не просто строчку текста, а большой кусок HTML-кода.

5. Использование шорткода вместе с классом.

Скопировано
class MyClass {
	function my_func( $atts, $content = '' ) {
		return "content = $content";
	}
}
add_shortcode( 'test', array( 'MyClass', 'my_func' ) );
Показать код