Сегодня столкнулся с неприятной особенностью Wordpress. Нужно было вывести один шорткод внутри другого.

Один из них просто выводил нужный мне кусок текста в нужном месте:

// кусок текста
function CustomText() {

 return '<p>Просто текст, который нужно вывести в нужном месте';
}
add_shortcode('text','CustomText');

Другой шорткод (shotcode) закрывал на блоге информацию паролем:

function ecpp_handler($atts, $content = null) {
….
Код шорткода
...
return $content;
}
add_shortcode("password-protect", "ecpp_handler");

Т.е. нужно было при написании заметки использовать следующую структуру:

[password-protect] Текст … [Text] [/password-protect]

Вместо того, чтобы вывелся кусок произвольного кода, в тексте заметки просто появлялся текст [Text] без изменений.

Проблему удалось решить и решение оказалось довольно простым. Нужно использовать функцию do_shortcode().

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

Доходим до самого конца функции и меняем:

return $content;

на

return do_shortcode($content);

Тем самым все шорткоды, которые будут находиться внутри, будут выполняться.

Теперь структура:

[password-protect] Текст … [Text] [/password-protect]

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

Больше моих уроков по Worpdress здесь.