Как проверить находимся ли мы в админке или во фронтенде?
Как проверить находимся ли мы в админке или во фронтенде?
Я хочу добавить add_action не в админке, а только во фронтенде.
Ознакомьтесь с is_admin() условным тегом:
function wpse106895_dummy_func() {
if ( ! is_admin() ) {
// выполняем нужные действия
}
}
add_action( 'some-hook', 'wpse106895_dummy_func' );
is_admin() возвращает true, если запрашивается URL в админ-панели / wp-admin. Следовательно, его отрицание (через оператор not) возвращает true для фронтенда.
Обновление, см. комментарии ниже:
function wpse106895_dummy_func() {
// выполняем нужные действия
}
if ( ! is_admin() ) add_action( 'some-hook', 'wpse106895_dummy_func' );
Это поможет снизить нагрузку.
if ( is_admin() ) add_action(). Не заполняйте массив фильтров значениями, которые вам никогда не понадобятся.
fuxia
Я часто проверял внутри колбэка - в конце концов, я полагал, что операторы никогда не будут интерпретированы, если условие не выполняется. О накладных расходах в массиве фильтров я никогда не задумывался.
Johannes Pille
! is_admin() возвращает true для wp-admin и wp-login.php, так что это не проверка для фронтенда
Benjamin Intal
Имейте в виду, что is_admin не проверяет крон-задания и AJAX-вызовы. Так что если вам действительно нужна только фронтенд-часть, этого может быть недостаточно.
janw
В продолжение того, что упомянул @janw, настоящая проверка фронтенда будет выглядеть так ( ! is_admin() || wp_doing_ajax() ) && ! wp_doing_cron()
WPExplorer
Бэкенд и фронтенд в современном вебе — это скорее состояние сознания, чем строгое разделение по URL-шаблонам или коду. Отнесение конкретной страницы к бэкенду или фронтенду может меняться в зависимости от типа пользователя, который её просматривает.
В контексте WordPress вопрос можно переформулировать как "Я хочу добавить действие при генерации HTML темы" (что может охватывать или не охватывать всю генерацию фронтенда в вашем конкретном случае). Для этого лучше всего использовать хук template_redirect, который срабатывает непосредственно перед тем, как WordPress решает, какой шаблон темы использовать для генерации HTML.
К сожалению, функция is_admin() не работает корректно, если вам нужно проверить в Widget::widget(), выполняется ли код на фронтенде или в админке.
Из-за этого возникает проблема с различием отображения виджета на блоге и на подстранице админки widget.php. На странице виджетов widgets.php в админке превью виджета выводится через HTML-тег <iframe>, поэтому is_admin() не является хорошим решением в данном случае.
Так как в WordPress нет функции is_front_end(), интересным решением будет создать функцию, которая проверяет, были ли вызваны функции get_header() и get_footer() в текущем запросе. Простая функция.
<?php
function is_front_end() {
if ( did_action( 'get_header' ) || did_action( 'get_footer' ) )
return true;
}
?>
Идея благодаря ответу @TheDeadMedic: