How can you check if you are in a particular page in the WP Admin section? For example how can I check if I am in the Users > Your Profile page?

I’m building a plugin and I want to add bits of javascript in the admin head but only for certain admin pages. I don’t mean pages as in a WordPress page that you create yourself but rather existing admin section pages like ‘Your Profile’, ‘Users’, etc. Is there a wp function specifically for this task? I’ve been looking and I can only find the boolean function is_admin and action hooks but not a boolean function that just checks.

Related posts

Leave a Reply

5 comments

  1. The way to do this is to use the ‘admin_enqueue_scripts’ hook to en-queue the files you need. This hook will get passed a $hook_suffix that relates to the current page that is loaded:

    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');
    
  2. There is a global variable in wp-admin called $pagenow which holds name of the current page, ie edit.php, post.php, etc.

    You can also check the $_GET request to narrow your location down further, for example:

    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
    
        }
    
  3. The most comprehensive method is get_current_screen added in WordPress 3.1

    $screen = get_current_screen();
    

    returns

    WP_Screen Object (
        [action] => 
        [base] => post
        [id] => post
        [is_network] => 
        [is_user] => 
        [parent_base] => edit
        [parent_file] => edit.php
        [post_type] => post
        [taxonomy] => 
    )
    
  4. To offer an alternative method/approach to the above question.

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

    This method targets the specific pages more directly and avoids needing conditional logic inside your callback(because you’ve already made that distinction in the selected hook).

  5. I find it weird that no one has mentioned the fact that the add_menu_page function returns an action hook which you can use to do certain actions only on those pages

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

    If you need the $hook and you didn’t add the menu page yourself the doc is here

    For instance the hook for a top level menu page is

    load-toplevel_page_$MenuSlug

    The hook for a submenu page is

    load-$MenuSlug_page_$SubMenuSlug

    Following that logic, the hook for the user’s profile page is

    load-users_page_profile