Как проверить находимся ли мы в админке или во фронтенде?

17 июл. 2013 г., 21:12:42
Просмотры: 20.7K
Голосов: 11

Как проверить находимся ли мы в админке или во фронтенде?

Я хочу добавить add_action не в админке, а только во фронтенде.

0
Все ответы на вопрос 3
6
19

Ознакомьтесь с 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' );

Это поможет снизить нагрузку.

17 июл. 2013 г. 21:16:02
Комментарии

if ( is_admin() ) add_action(). Не заполняйте массив фильтров значениями, которые вам никогда не понадобятся.

fuxia fuxia
17 июл. 2013 г. 21:51:29

Я часто проверял внутри колбэка - в конце концов, я полагал, что операторы никогда не будут интерпретированы, если условие не выполняется. О накладных расходах в массиве фильтров я никогда не задумывался.

Johannes Pille Johannes Pille
17 июл. 2013 г. 21:56:33

! is_admin() возвращает true для wp-admin и wp-login.php, так что это не проверка для фронтенда

Benjamin Intal Benjamin Intal
1 авг. 2015 г. 11:17:28

Имейте в виду, что is_admin не проверяет крон-задания и AJAX-вызовы. Так что если вам действительно нужна только фронтенд-часть, этого может быть недостаточно.

janw janw
12 нояб. 2016 г. 17:56:35

В продолжение того, что упомянул @janw, настоящая проверка фронтенда будет выглядеть так ( ! is_admin() || wp_doing_ajax() ) && ! wp_doing_cron()

WPExplorer WPExplorer
5 мая 2020 г. 09:38:34

@WPExplorer - что будет противоположностью вашей "настоящей проверки фронтенда" - проверка "бэкенда", и не редактирование комментария там, или добавление ответа на комментарий в админке на экране комментариев?

Rick Hellewell Rick Hellewell
23 янв. 2022 г. 03:07:43
Показать остальные 1 комментариев
0

Бэкенд и фронтенд в современном вебе — это скорее состояние сознания, чем строгое разделение по URL-шаблонам или коду. Отнесение конкретной страницы к бэкенду или фронтенду может меняться в зависимости от типа пользователя, который её просматривает.

В контексте WordPress вопрос можно переформулировать как "Я хочу добавить действие при генерации HTML темы" (что может охватывать или не охватывать всю генерацию фронтенда в вашем конкретном случае). Для этого лучше всего использовать хук template_redirect, который срабатывает непосредственно перед тем, как WordPress решает, какой шаблон темы использовать для генерации HTML.

25 мая 2018 г. 19:00:35
1

К сожалению, функция 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:

https://wordpress.stackexchange.com/a/228236/84343

16 нояб. 2023 г. 09:59:48
Комментарии

Не уверен, сработает ли это во всех случаях. Если вам нужно что-то сделать до вывода заголовка или в самом заголовке, это не сработает?

DrLightman DrLightman
14 нояб. 2024 г. 15:13:00