Как вы можете проверить, находитесь ли вы на определенной странице в разделе WP Admin? Например, как я могу проверить, находится ли я на странице «Пользователи»> «Ваш профиль»?

Я создаю плагин, и я хочу добавить биты javascript в голову администратора, но только для определенных страниц администрирования. Я не имею в виду страницы, как на странице WordPress, которые вы создаете сами, а скорее существующие разделы раздела администрирования, такие как «Ваш профиль», «Пользователи» и т. Д. Существует ли функция wp специально для этой задачи? Я искал, и я могу найти только логическую функцию is_admin и action hooks, но не логическую функцию, которая просто проверяет.

Способ сделать это – использовать крюк admin_enqueue_scripts, чтобы en-queue нужные вам файлы. Этот hook получит переданный $ 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'); 

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

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

 global $pagenow; if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) { // editing a page } if ($pagenow == 'users.php') { // user listing page } if ($pagenow == 'profile.php') { // editing user profile page } 

Самый полный метод – 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] => ) 

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

 // When you are viewing the users list or your editing another user's profile add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' ); // When you are editing your own profile add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' ); function your_enqueue_callback() { wp_enqueue_script( .. YOUR ENQUEUE ARGS .. ); } 

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

Мне кажется странным, что никто не упомянул о том, что функция 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, и вы не добавили страницу меню самостоятельно, документ находится здесь

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

нагрузки toplevel_page_ $ MenuSlug

Крючок для страницы подменю

load- $ MenuSlug_page_ $ SubMenuSlug

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

нагрузки users_page_profile