Просмотров: 2 029

Как в WordPress вставить один шорткод (shortcode) внутрь другого.

Сегодня столкнулся с неприятной особенностью 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]

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

  • Максим

    А как вставить в шаблон форму входа на сайт (поля Логин и Пароль)???

    • admin

      Посмотрите, может быть это поможет

      http://pippinsplugins.com/wordpress-login-form-short-code/

      • Максим

        Подробнее можно??? Что-то я не совсем разобрался кудой код вставлять!? В любое место файла wp-login.php!??? Или переписать содержимое wp-login.php на вот этот код!?

  • http://just-onlineplay.ru Алексей

    Просто огромнейшее спасибо за идею! У меня была проблема. Я сделал шорткод [noindex]закрываемый текст[/noindex], и в один момент пришлось внутрь этого шорткода поместить шорткод кнопки и выглядело это примерно так: [noindex][knopka][/knopka][/noindex] в итоге кнопка переставала работать. Долго искал как решить проблему, и нашел у вас. Вот так я сделал, может кому пригодится:

    /* Шорткод ноиндекс в редакторе*/
    function shortcode_noindex_add ($atts, $content = null)
    {
    return do_shortcode («$content«);
    }
    add_shortcode(‘noindex’, ‘shortcode_noindex_add’);