WordPress: двойной шорткод

· WordPress, Разработка плагинов и Шорткоды · 2 мин чтения
AnyComment - Современный виджет комментариев для WordPress

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

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

  • Самозакрывающийся шорткод, которые мы обсудили в 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] будут считаться разными шорткодами.