Я заметил, что некоторые плагины, такие как Contact-form-7 , Nextgen-gallery , возможно, другие, имеют интересную анти-функцию - не регистрировать свои шорткоды, когда is_admin()
это правда.
Проблема в том, что если вы хотите сгенерировать какой-то динамический контент (который может иметь шорткод) из ajax и использовать «правильный» способ wp, admin-ajax.php, то невозможно, чтобы WP_ADMIN был истинным. Смотрите первые строки admin-ajax.php:
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
Теперь, кажется, есть расширения PHP, которые позволят вам отменить определенную константу (хакерскую), или может быть способ возиться с недокументированной системой WP_Screen и $GLOBALS['current_screen']
заставить is_admin()
функцию возвращать false ?? Наиболее полезный обходной путь, кажется, отправляет на страницу или корень сайта.
Часто ли плагины регистрируют свои шорткоды, когда is_admin()
ложно? Если так, я не мог найти никакой документации или причины для этого кроме того, что это может быть преждевременной оптимизацией.
is_admin
выполняется с помощью do_it_wrong, в WP есть гораздо лучшие способы проверки запросов на ajax. Наконец, если плагин ставит в очередь js / css, если он делает это хорошо (используя'wp_enqueue_scripts'
действие), это не повлияет на страницы администратора, потому что эта ловушка не запускается на страницах администратора.the_content
вызовы и вызовы admin-ajax.На самом деле, нет причин не регистрировать шорткоды на админа.
Если автор плагина хочет отключить форму плагина Ajax, он должен сделать
вместо проверки это админ.
Обратите внимание, что в будущем возможно, что Shortcake будет встроен в ядро, потому что это «Feature Plugin».
Если это произойдет, шорткод, не определенный в admin, не будет работать с ним. Это дает вам еще одно подтверждение того, что нет причин не регистрировать шорткоды для администратора: даже разработчики ядра работают над вещами, которые требуют шорткоды, доступные для администратора.
Тем не менее, у вас есть возможности:
Что касается # 2, на самом деле существуют библиотеки, которые могут заставить
is_admin
быть правдой. Они хакерские, и я бы никогда не использовал их в производстве.Примером является Пэчворк .
Используя его, вы можете переопределить любую пользовательскую функцию PHP.
В плагине MU вы можете сделать (полностью НЕПРОВЕРЕНО):
Это сделает
is_admin()
возврат ложным при запросах ajax.Однако, как уже было сказано, это довольно хакерский и повлияет на поведение других плагинов (и ядра) с непредсказуемым эффектом.
Еще одна вещь, которую вы можете сделать, это зарегистрировать обработчик шорткода плагина на запросы администратора.
Например, если код плагина:
тогда вы можете написать другой плагин, который делает:
Таким образом, шорткод будет добавлен в обоих случаях.
Это может или не может работать в одиночку в зависимости от другого кода плагина, но нет общего ответа на это.
источник
add_shortcode('shortcode', array('their-class', 'their-function') )
или подобное.