it-swarm.com.ru

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

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

32
racl101

Способ сделать это - использовать ловушку 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');
23
prettyboymp

В 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

    }
53
goldenapples

Наиболее полный метод 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] => 
)
18
Louis-Rémi

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

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

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

9
t31os

Я нахожу странным, что никто не упомянул тот факт, что функция 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

3
Tofandel