Использование do_shortcode() на страницах админки WordPress

12 авг. 2012 г., 00:26:44
Просмотры: 13.6K
Голосов: 15

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

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

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


Конкретно я пытаюсь использовать шорткоды WooCommerce в админке WordPress. Меня раздражает, что плагины не используют бэкенд WP для управления учетными записями/пользователями.

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

Тот, кто решил, что "я не провёл никакого исследования" и поставил мне отрицательную оценку без комментариев, ведёт себя крайне непрофессионально.

dcolumbus dcolumbus
12 авг. 2012 г. 00:39:34

Пожалуй, можно сказать, что шорткоды предназначены для фронтенд-контента... Вы пытаетесь использовать другой плагин для генерации контента на странице администрирования вашего собственного плагина?

Damien Damien
12 авг. 2012 г. 00:56:09

@dcolumbus Согласен. В последнее время я заметил несколько необоснованных минусов, определённо больше, чем раньше. ИМХО, это честный (и довольно крутой) вопрос, так что я сейчас попробую на него ответить ;)

TheDeadMedic TheDeadMedic
12 авг. 2012 г. 01:39:05

Если вы создали страницу администратора, то можете указать вывод - зачем вам нужно/хотите использовать do_shortcode(). Можете привести пример?

Stephen Harris Stephen Harris
12 авг. 2012 г. 01:53:12

Конкретно я пытаюсь использовать шорткоды WooCommerce. Страницы управления пользователями и управления аккаунтами.

dcolumbus dcolumbus
12 авг. 2012 г. 22:35:05
Все ответы на вопрос 2
3
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' => 'Это ', 'after' => '!' ), 
    'работает' 
);

Вывод: Это работает!.

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

12 авг. 2012 г. 02:01:04
Комментарии

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

TheDeadMedic TheDeadMedic
12 авг. 2012 г. 02:15:00

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

dcolumbus dcolumbus
12 авг. 2012 г. 22:35:38

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

Ian Dunn Ian Dunn
15 сент. 2012 г. 12:49:50
1

Похоже, что API шорткодов действительно доступен в админке, но его вывод зависит от конкретного тега шорткода.

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

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

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

12 авг. 2012 г. 01:47:59
Комментарии

Кроме того, некоторые теги ожидают, что функция get_the_ID() вернёт ID записи.

Stephen Harris Stephen Harris
12 авг. 2012 г. 01:52:09