Как проверить, находитесь ли вы на определенной странице в админ-панели WordPress? Например, как проверить, что вы находитесь на странице Пользователи > Ваш профиль?

19 янв. 2011 г., 20:37:31
Просмотры: 84.6K
Голосов: 57

Я разрабатываю плагин и хочу добавить некоторый JavaScript-код в head админ-панели, но только для определенных административных страниц. Я имею в виду не страницы, которые вы создаете сами в WordPress, а существующие страницы админ-панели, такие как 'Ваш профиль', 'Пользователи' и т.д. Существует ли специальная функция WordPress для этой задачи? Я искал и нашел только булеву функцию is_admin и хуки действий, но не нашел булеву функцию, которая просто проверяет это.

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

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

t31os t31os
24 февр. 2011 г. 19:21:49
Все ответы на вопрос 5
3
86

В админке WordPress существует глобальная переменная $pagenow, которая содержит название текущей страницы, например edit.php, post.php и т.д.

Вы также можете проверить $_GET запрос для более точного определения местоположения, например:

global $pagenow;
if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) {

    // редактируем страницу

    }

if ($pagenow == 'users.php') {

    // страница списка пользователей

    }

if ($pagenow == 'profile.php') {

    // страница редактирования профиля пользователя

    }
19 янв. 2011 г. 20:48:59
Комментарии

global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. } например, проверяет, находитесь ли вы на странице настроек темы admin.php?page=prefix-theme-settings.

lowtechsun lowtechsun
14 февр. 2018 г. 23:01:13

Спасибо. Это отличный ответ, который помог.

Abilash Erikson Abilash Erikson
5 нояб. 2021 г. 13:06:33

Это идеально. Большое спасибо! Я пробовал глобальную переменную $wp, но свойство request там оставалось пустым.

Daan van den Bergh Daan van den Bergh
2 февр. 2023 г. 15:29:28
5
35

Наиболее полным методом является get_current_screen, добавленный в WordPress 3.1

$screen = get_current_screen();

возвращает

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
6 сент. 2013 г. 16:41:24
Комментарии

"Ограничения использования --

Эта функция определена на большинстве страниц админки, но не на всех. Поэтому бывают случаи, когда is_admin() возвращает true, но попытка вызвать get_current_screen() приведет к фатальной ошибке, так как функция не определена. Один известный пример - wp-admin/customize.php.

Функция возвращает null, если вызывается из хука admin_init. Её можно безопасно использовать в более поздних хуках, таких как current_screen." -- Codex.

That Brazilian Guy That Brazilian Guy
26 янв. 2018 г. 18:17:44

@ThatBrazilianGuy Быстрая проверка показывает, что это больше не так. Насколько я вижу, get_current_screen() можно безопасно использовать на всех страницах админки.

Steven Steven
27 янв. 2019 г. 10:31:50

@shahar Согласно приведенной выше документации и моему опыту, это всё ещё актуально.

fabrik fabrik
14 мар. 2019 г. 10:37:27

это до сих пор так. Вы можете воспроизвести это при создании плагина и его активации. Это вызовет фатальную ошибку при активации, так как вы находитесь на странице, где функция не определена :(

seawave_23 seawave_23
4 янв. 2021 г. 16:34:23

вы всегда можете проверить и выйти if (!function_exists('get_current_screen')) return ; если ваша логика зависит от этого :)

jave.web jave.web
26 февр. 2021 г. 03:41:16
0
32

Для этого необходимо использовать хук 'admin_enqueue_scripts' для подключения нужных файлов. Этот хук получает параметр $hook_suffix, который соответствует текущей загруженной странице:

function my_admin_enqueue($hook_suffix) {
    if($hook_suffix == 'appearance_page_theme-options') {
        wp_enqueue_script('my-theme-settings', get_template_directory_uri() . '/js/theme-settings.js', array('jquery'));
        wp_enqueue_style('my-theme-settings', get_template_directory_uri() . '/styles/theme-settings.css');
        ?>
        <script type="text/javascript">
        //<![CDATA[
        var template_directory = '<?php echo get_template_directory_uri() ?>';
        //]]>
        </script>
        <?php
    }
}
add_action('admin_enqueue_scripts', 'my_admin_enqueue');
19 янв. 2011 г. 21:08:39
1
11

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

// При просмотре списка пользователей или редактировании профиля другого пользователя
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// При редактировании собственного профиля
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. YOUR ENQUEUE ARGS .. );
}

Этот метод более точно нацеливается на конкретные страницы и позволяет избежать необходимости в условной логике внутри вашей функции обратного вызова (поскольку это различие уже сделано в выбранном хуке).

27 янв. 2011 г. 17:53:16
Комментарии

Хотел бы знать, почему этот ответ не получил больше голосов, он точно соответствует описанному случаю в вопросе и предлагает решение с минимальным количеством кода. Было бы неплохо получить обратную связь..

t31os t31os
28 янв. 2014 г. 16:56:58
0

Мне кажется странным, что никто не упоминает факт, что функция add_menu_page возвращает хук действия, который можно использовать для выполнения определенных действий только на этих страницах

$hook = add_menu_page($menu_title, $page_title, $capability, $slug, $function, $icon_url, $position);
add_action( 'load-' . $hook, 'my_admin_enqueue_scripts' );
function my_admin_enqueue_scripts() {
    wp_enqueue_script(/*...*/);
    wp_enqueue_style(/*...*/);
}

Если вам нужен $hook, а вы сами не добавляли страницу меню, документация находится здесь

Например, хук для страницы верхнего уровня меню:

load-toplevel_page_$MenuSlug

Хук для страницы подменю:

load-$MenuSlug_page_$SubMenuSlug

Следуя этой логике, хук для страницы профиля пользователя:

load-users_page_profile

24 окт. 2017 г. 21:28:18