Включение шорткодов для произвольных полей

15 июн. 2015 г., 11:20:28
Просмотры: 23.6K
Голосов: 3

Итак, в этой статье объясняется, как включить шорткоды для произвольных полей в WordPress. (По умолчанию шорткоды не работают в произвольных полях.)

Что мне непонятно, так это куда поместить этот код:

<?php echo do_shortcode(get_post_meta(get_the_ID(), 'name', true)); ?>

Я понимаю, что нужно вставить название моего произвольного поля в параметр 'name', но куда именно мне нужно поместить эту строку кода?

Полагаю, в functions.php шаблона? Но я не уверен, в каком именно месте этого файла. Я не хочу ничего сломать в моём шаблоне.

Буду благодарен за любые предложения.

2
Комментарии

Я действительно не понимаю, что вы пытаетесь сделать. Шорткоды не должны выполняться внутри произвольных полей. Зачем вам это нужно? Кстати, если вы используете do_shortcode(), то делаете это неправильно.

Pieter Goosen Pieter Goosen
15 июн. 2015 г. 11:30:35

Согласен, что это плохой дизайн, но в рамках моего шаблона это в настоящее время единственное решение для определённой проблемы. Мне нужно иметь возможность использовать шорткод внутри произвольного поля. Разве это невозможно?

rails_has_elegance rails_has_elegance
15 июн. 2015 г. 11:48:46
Все ответы на вопрос 1
5
10

Обычно WordPress не выполняет шорткоды, которые вы добавляете в произвольные поля.

По умолчанию, произвольные поля отображают введенное значение как обычный текст, поэтому если вы попытаетесь ввести шорткод (в формате [shortcode] ЗНАЧЕНИЕ [/shortcode]), в результате будет отображаться весь текст, включая теги.

Добавьте следующий код в ваш шаблонный файл, это может быть single.php или page.php:

echo apply_filters('the_content', get_post_meta($post->ID, 'НАЗВАНИЕ_ВАШЕГО_ПОЛЯ', true));

или...

$shortcode = get_post_meta($post->ID, 'НАЗВАНИЕ_ВАШЕГО_ПОЛЯ', true);
echo do_shortcode($shortcode);
15 июн. 2015 г. 16:58:25
Комментарии

Хм, у меня не получается заставить это работать. Должен признать, что я не очень хорошо понимаю, как фреймворк WordPress работает "под капотом". Я попробовал оба предложенных вами решения, но ни одно не сработало. Я пробовал их в файлах шаблонов page.php и single.php. Вставлял код в самом начале внутри первого php-тега. Возможно, мой шаблон просто не может работать с этим кодом. Кстати: я использую произвольные поля на странице блога, где все записи отображаются вместе в формате превью.

rails_has_elegance rails_has_elegance
15 июн. 2015 г. 18:21:28

Произвольные поля не работают корректно в формате превью. Вам следует сохранять свою работу перед тестированием.

Bruno Monteiro Bruno Monteiro
15 июн. 2015 г. 20:46:15

-1 Минус Не используйте шорткоды https://kovshenin.com/2013/dont-do_shortcode/

Brad Dalton Brad Dalton
4 авг. 2015 г. 11:36:06

@BradDalton Аргумент Ковшенина заключается в том, что не следует использовать do_shortcode(), когда можно напрямую вызывать callback-функцию шорткода, поэтому данный совет неприменим к текущему вопросу. Так что я отменяю ваш минус, ставя плюс этому ответу!

Bigue Nique Bigue Nique
7 нояб. 2018 г. 18:04:31

Можно ли сделать это без изменения файлов шаблона темы, например через простой плагин?

Drewdavid Drewdavid
3 мая 2021 г. 01:10:37