Як ви можете перевірити, чи перебуваєте ви на певній сторінці в розділі WP Адміністратор? Наприклад, як я можу перевірити, чи перебуваю я на сторінці Користувачі> Ваш профіль?


32

Я будую плагін і хочу додати біти JavaScript у голову адміністратора, але лише для певних сторінок адміністратора. Я не маю на увазі сторінки, як на сторінці WordPress, які ви створюєте самі, а на існуючих сторінках розділів адміністратора, таких як "Ваш профіль", "Користувачі" тощо. Чи є функція wp спеціально для цього завдання? Я шукав, і я можу знайти лише булева функція is_adminта гачки дії, але не булева функція, яка просто перевіряє.


1
Ніжний поштовх, щоб нагадати, що відповідь не прийнято. Якщо жодна з наданих відповідей не відповідає на ваше запитання достатньою мірою, або ви намагаєтесь зрозуміти надану інформацію, будь ласка, прокоментуйте нас.
t31о

Відповіді:


24

Спосіб для цього - використовувати гачок 'admin_enqueue_scripts' для введення в чергу чергових файлів. Цей гачок буде переданий $ kuk_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');

55

У wp-адміністраторі є глобальна змінна під назвою $ 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

    }

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

19

Найбільш повний метод 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] => 
)

3
"Обмеження використання - Ця функція визначена на більшості сторінок адміністратора, але не на всіх. Таким чином, є випадки, коли is_admin () повернеться правдою, але спроба викликати get_current_screen () призведе до фатальної помилки, оскільки вона не визначена. відомий приклад - wp-admin / customize.php. Функція повертає null, якщо викликається з гачка admin_init. Слід використовувати OK у пізнішому гаку, такому як current_screen. "- Codex .
Той бразильський хлопець

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

1
@shahar це все-таки так, згідно з документацією, зв'язаною вище та моїм досвідом.
fabrik

9

Запропонувати альтернативний метод / підхід до вищезазначеного питання.

// 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 .. );
}

Цей метод спрямований на конкретні сторінки більш безпосередньо і уникає необхідності умовної логіки всередині зворотного дзвінка (оскільки ви вже зробили це розрізнення у вибраному гачку).


Хотілося б я знати, чому ця відповідь не отримала більше голосів, висвітлює точний випадок використання у питанні та надає рішення в мінімальній кількості коду. Зворотній зв'язок був би приємний ..
t31os

3

Мені здається дивним, що ніхто не згадував той факт, що функція 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(/*...*/);
}

Якщо вам потрібен $ гак, і ви самі не додали сторінку меню, тут є документ

Наприклад, гак для сторінки меню верхнього рівня

load-toplevel_page_ $ MenuSlug

Гак для сторінки підменю є

load- $ MenuSlug_page_ $ SubMenuSlug

Дотримуючись цієї логіки, гак для сторінки профілю користувача є

load-users_page_profile

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.