Использование do_shortcode() на страницах админки WordPress
Я использую несколько плагинов, которые имеют шорткоды... Однако вместо создания публичной страницы для контента я создал несколько новых страниц в админке с помощью add_menu_page
, и мне нужно знать, как использовать do_shortcode()
в этом контексте.
В текущем состоянии функция просто выводит строку. Я предполагаю, что это происходит потому, что API шорткодов недоступен на страницах админки.
Как обойти эту проблему? Я не могу найти документации, которая объясняла бы, как использовать шорткоды в админке WordPress... или возможно ли это вообще.
Конкретно я пытаюсь использовать шорткоды WooCommerce в админке WordPress. Меня раздражает, что плагины не используют бэкенд WP для управления учетными записями/пользователями.

Вместо вызова do_shortcode()
просто вызывайте функцию, связанную с шорткодом.
Пример
Есть шорткод с именем [example]
и функция, зарегистрированная как обработчик шорткода:
function example_shortcode( $atts = array(), $content = '' )
{
extract(
shortcode_atts(
array (
'before' => '',
'after' => '',
),
$atts
)
);
return $before . $content . $after;
}
add_shortcode( 'example', 'example_shortcode' );
На странице админки просто вызовите функцию:
echo example_shortcode(
array ( 'before' => 'Это ', 'after' => '!' ),
'работает'
);
Вывод: Это работает!
.
Быстрее и надежнее, чем do_shortcode()
.

Я даже не думал об этом! С другой стороны, я никогда не использовал шорткоды в админке (по какой-то причине) и у меня был повод разобраться ;)

Я тоже не понимаю, почему не додумался до этого... Сейчас попробую и отпишусь о результатах!

Недостаток этого подхода в том, что он перестанет работать, если автор плагина изменит callback-функцию шорткода в будущем. Изменения в самом шорткоде, скорее всего, будут обратно совместимыми, но вот имена внутренних функций плагина с меньшей вероятностью останутся прежними.

Похоже, что API шорткодов действительно доступен в админке, но его вывод зависит от конкретного тега шорткода.
Встроенный шорткод [caption]
работает как ожидается, тогда как [embed]
— нет (это связано с тем, как API встраивания «лениво» загружает свой шорткод и зависит от выполнения фильтра the_content
, так что технически это не вина API шорткодов).
Вывод: Все полностью зависит от того, как и когда зарегистрирован тег, а также что он делает/предполагает при выполнении.
@dcolumbus О каком именно теге идет речь в вашем случае?
