О web-разработке
и даже немного больше...

Как создать свои шорткоды в WordPress

Всем привет, сегодня мы поговорим про шорткоды в WordPress. Шорткоды позволяют вставлять в области вывода контента результаты выполнения какого-либо заготовленного кода. Это очень удобно, ведь можно короткой записью подключать существенные блоки кода. Так к примеру, в самом движке WordPress уже существует набор стандартных шорткодов, которые могут быть использованы для вывода.

Стандартные шорткоды WordPress

Пример стандартных шорткодов WordPress:
[audio]
[caption]
[gallery]
[playlist]
[video]

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

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

[[gallery size="large" ids="45,35,25"]]

Так мы обратились к шорткоду с названием gallery, передав параметры size и ids. Набор параметров может быть произвольным, и регламентируется отдельно для каждого шорткода.

Создание своих шорткодов в WordPress

Довольно перспективной становится возможность создания и использования собственных шорткодов в WordPress. Так множество плагинов используют эту возможность для простой интеграции блоков данных на сайт. К примеру, вы устанавливаете плагин с формой обратной связи, и на нужной странице вам достаточно добавить код вывода этой формы. Минимум кода, максимум эффекта. С таким же успехом мы можем создавать уникальные шорткоды для своих проектов.

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

Создаём в файле functions.php свой шорткод:

add_shortcode( 'footag', 'footag_func' );

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

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

[footag foo="bar"]

Если в системе уже есть шорткод с таким названием, допустим в каком-либо плагине, то она будет заменена, с приоритетом в том порядке как вызываются функции.
Стоит обратить внимание на то, что результат работы функции всегда должен возвращаться через return а не выводиться на экран. В целом принцип использования довольно прост.

Возможность использования add_shortcode() появилась в WordPress начиная с версии 2.5. Это так же следует учитывать если вы решили использовать их в своих проектах.

Закрывающиеся шоркоды в WordPress

Существует и другой способ записи шоркодов, который расширяет возможность их использования. В отличии от предыдущего примера, есть возможность использования закрывающихся шорткодов. Это позволяет внутри них добавлять и другие шорткоды. Реализуется это посредством встроенной функции do_shortcode().

Рассмотрим такой пример вывода:

[footag foo="bar"]
	Здесь может быть произвольный текст,
	[myurl]
[/footag]

Сама функция-обработчик будет получать дополнительный параметр:

add_shortcode( 'footag', 'footag_func' );

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

Таким образом, кроме выполнения шоркода footag, внутри посредством функции do_shortcode() будет выполнен шорткод [myurl], который был передан вместе с текстом родительского шорткода.

Экранирование шорткодов

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

[[footag]]

Для открывающих/закрывающих шорткодов будет такая запись:

[[footag] ... [/footag]]

Обратите внимание на то, что использоваться экранирование может лишь для зарегистрированных шорткодов на сайте. Для других случаев можно так же использовать html-сущности, в качестве альтернативы показа квадратных скобок.

[footag]

При отрисовки страницы в браузере html-сущности будут замены на открывающие и закрывающие квадратные скобки соответственно.

Часто в функции-обработчике шорткода приходится использовать существенное количество html-разметки. Т.к. функция не должна выводить сразу результат, а передаваться в виде значения, то удобно использовать для этих целей буферизацию вывода.

Буферизация вывода в шорткоде

Что касается буферизации вывода, то тут всё стандартно для PHP. Выполнять буферизацию нужно в функции-обработчике, и оформить его следует таким вот образом:

function footag_func() {
	ob_start();
	?>
	<!--Тут можно выводить данные в HTML-->
	<?
	$output = ob_get_contents(); // сохраняем вывод в $output
	ob_end_clean();

	return $output;
}

Вся HTML-разметка внутри буфера попадает в переменную $output и передаётся в качестве результата выполнения функции. Довольно-таки удобно, особенно если речь идёт о работе с большими кусками кода вёрстки страницы. Бывает и так, что самого кода слишком много, в PHP его оформляют в виде отдельных классов. Регистрировать шорткоды можно как для отдельных функций-обработчиков, так и для методов класса.

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

Чтобы подключить метод класса вместо одиночной функции, в качестве второго параметра add_shortcode() следует передать массив, первым элементом которого будет название класса, а вторым – название метода класса.

add_shortcode( 'footag', [ 'MyPlugin', 'footag_func' ] );

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

Таким образом, при выполнении шорткода будет вызван метод в классе MyPlugin с названием footag_func. Что касается параметров, передаваемых методу, то они идентичны предыдущим примерам. Такой способ часто используется в различных плагинах, которые устанавливаются дополнительно на сайте.

Опубликован: 05.02.2021 г.

См. также:

Убираем URL из формы комментариев WordPress
Работа с базой данных в WordPress
SQL-запросы для смены домена в WordPress
Мультиязычность с помощью плагина Polylang
Как добавить виджет на сайт WordPress?
Добавление записей в WordPress средствами PHP
Как отключить архивы по авторам в WP?
Импорт записей из Excel в WordPress

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта