Сегодня столкнулся с неприятной особенностью 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 здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти