do_shortcode () на странице администратора

14

Я использую несколько плагинов, которые имеют шорткоды ... однако вместо создания общедоступной страницы для контента я создал несколько новых страниц с помощью администратора, add_menu_pageи мне нужно знать, как их использовать do_shortcode()в этом контексте.

В существующем состоянии вся функция выплевывает строку. Я предполагаю, что это потому, что API шорткода недоступен на странице администратора.

Как мне обойти это? Я не могу найти никакой документации, объясняющей, как использовать шорткоды в WP Admin ... или, если это вообще возможно.


В частности, я пытаюсь использовать короткие коды WooCommerce в WP Admin. Я ненавижу тот факт, что плагины не используют WP Backend для управления учетными записями / пользователями.

dcolumbus
источник
Кто бы ни пришел и решил, что «я не проводил никаких исследований» и дал мне отрицательный балл без комментариев, это крайне бесполезно.
dcolumbus
1
Я думаю, вы могли бы сказать, что шорткоды предназначены для внешнего интерфейса ... Вы пытаетесь использовать другой плагин для создания контента для вашей собственной страницы администратора плагина?
Дэмиен
@dcolumbus Я согласен. Недавно я видел несколько ложных отрицательных голосов, конечно больше, чем я помню в прошлом. ИМО, это честный (и довольно крутой) вопрос, поэтому я сейчас пытаюсь ответить;)
TheDeadMedic
Если вы создали страницу администратора, вы можете указать вывод - зачем вам это нужно / хотите использовать do_shortcode(). Можете ли вы привести пример?
Стивен Харрис
Специально я пытаюсь использовать шорткоды WooCommerce. Страницы управления пользователями и учетными записями.
dcolumbus

Ответы:

10

Вместо вызова 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' => 'This ', 'after' => '!' ), 
    'works' 
);

Выход: This works!.

Быстрее и надежнее, чем do_shortcode().

Фуксия
источник
1
Я даже не думал об этом! Опять же, я никогда не использовал шорткоды в админе (по какой-то причине) и имел повод для расследования;)
TheDeadMedic
Я понятия не имею, почему я тоже не подумал об этом ... Я собираюсь попробовать и доложить!
dcolumbus
Одним из недостатков этого является то, что он сломается, если автор плагина реорганизует функцию обратного вызова шорткода в будущем. Изменения самого шорткода, вероятно, будут обратно совместимы, но менее вероятно, что имена внутренних функций плагина будут.
Ян Данн
2

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

Встроенная функция [caption]работает, как и ожидалось, тогда как [embed]не работает (это связано с тем, что API встраивания «лениво загружает» свой шорткод и зависит от the_contentзапускаемого фильтра, поэтому технически это не ошибка API шорткода).

Вывод: это полностью зависит от того, как и когда тег зарегистрирован, и что он делает / предполагает при выполнении.

@dcolumbus О каком теге мы говорим в вашем случае?

TheDeadMedic
источник
1
Кроме того, некоторые теги будут ожидать get_the_ID()возвращения идентификатора сообщения.
Стивен Харрис