В этой записи мы поговорим о том, как создать двойной шорткод, с помощью которого можно захватить какую-либо часть контента (текст и прочее).
У вас есть два варианта использования шорткодов:
- Самозакрывающийся шорткод, которые мы обсудили в WordPress: простой шорткод
- И двойной шорткод, которые будет обсуждаться ниже в этой записи.
Двойной шорткод
Такого рода шорткод, позволяет вам управлять контентом внутри.
[bologer]контент, которые вы можете изменять[/bologer]
Из примера выше, вы можете иметь открывающий [bologer]
и закрывающий [/bologer]
тэг шорткода, почти так же как в HTML.
Обработка двойных шорткодов
Функция шорткода может выглядеть так:
<?php function bologer_shortcode($atts = [], $content = null) { // тут вы что-то делаете с $content // всегда возвращайте return $content; } add_shortcode('bologer', 'bologer_shortcode');
Смотря callback функцию bologer_shortcode
, вы можете увидеть, что она принимает два аргумента. $content
будет держать текст, которые будет между тегом шорткода, а $atts
, мы обсудим чуть позже.
По умолчанию, $content
равняется null
, поэтому вы легко можете понять разницу между обычным и двойным шорткодом. Проверить $content
вы можете используя функцию is_null()
.
Сам шорткод [bologer]
и весь текст до [/bologer]
будет заменен на то, что вы вернёте из bologer_shortcode
.
Так же не забывайте о безопасном выводе данных из callback’а.
Обработка шорткода в шорткоде
Если внутри вашего шорткода будет еще один шорткод, то он не будет автоматически отображаться. В примере ниже, [shortcode]
— это шорткод, который так и останется текстом, если $content
не будет специально обработан.
[bologer]другой [shortcode] который будет добавлен[/bologer]
Для того, чтобы корректно отобразить другие шорткоды внутри вашего шорткода — используйте do_shortcode() перед возвратом из callback функции.
<?php function bologer_shortcode($atts = [], $content = null) { // сделать что-то с $content // рекурсивно запустить шорткод парсер $content = do_shortcode($content); // всегда возвращаем return $content; } add_shortcode('bologer', 'bologer_shortcode');
Ограничения
Шорткод парсер do_shortcode() не сможет корректно отобразить миксованные шорткоды, которые были не правильно открыты.
[bologer] не закрытий тег [bologer]текст внутри шорткода[/bologer]
В примере выше, [bologer]
и [bologer]текст внутри шорткода[/bologer]
будут считаться разными шорткодами.