Всем привет, сегодня мы поговорим про шорткоды в WordPress. Шорткоды позволяют вставлять в области вывода контента результаты выполнения какого-либо заготовленного кода. Это очень удобно, ведь можно короткой записью подключать существенные блоки кода. Так к примеру, в самом движке WordPress уже существует набор стандартных шорткодов, которые могут быть использованы для вывода.
Пример стандартных шорткодов WordPress:
[audio]
[caption]
[gallery]
[playlist]
[video]
Можно заметить каждый шорткод заключён в квадратные скобки. Название шорткода идёт сразу после открытия скобки. Дело в том, что кроме самого символьного кода так же могут передаваться параметры, которые очень часто используются на практике.
Рассмотрим пример вывода галереи на сайте, посредством использования шорткода с некоторым набором параметров.
[[gallery size="large" ids="45,35,25"]]
Так мы обратились к шорткоду с названием gallery, передав параметры size и ids. Набор параметров может быть произвольным, и регламентируется отдельно для каждого шорткода.
Довольно перспективной становится возможность создания и использования собственных шорткодов в 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. Это так же следует учитывать если вы решили использовать их в своих проектах.
Существует и другой способ записи шоркодов, который расширяет возможность их использования. В отличии от предыдущего примера, есть возможность использования закрывающихся шорткодов. Это позволяет внутри них добавлять и другие шорткоды. Реализуется это посредством встроенной функции 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. Что касается параметров, передаваемых методу, то они идентичны предыдущим примерам. Такой способ часто используется в различных плагинах, которые устанавливаются дополнительно на сайте.