¿Cómo puede verificar si se encuentra en una página en particular en la sección WP Admin? Por ejemplo, ¿cómo puedo verificar si estoy en la página Usuarios de tu perfil?

25

Estoy creando un complemento y quiero agregar bits de javascript en la cabeza de administrador, pero solo para ciertas páginas de administración. No me refiero a páginas como en una página de WordPress que usted mismo cree, sino a páginas existentes de la sección de administración como 'Su perfil', 'Usuarios', etc. ¿Existe una función wp específicamente para esta tarea? He estado buscando y solo puedo encontrar la función booleana is_admin y los ganchos de acción, pero no una función booleana que solo verifique.

    
pregunta racl101 19.01.2011 - 19:37

5 respuestas

21

La forma de hacerlo es usar el enlace 'admin_enqueue_scripts' para poner en cola los archivos que necesita. Este gancho se pasará un $ hook_suffix que se relaciona con la página actual que se carga:

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');
    
respondido por el prettyboymp 19.01.2011 - 20:08
50

Hay una variable global en wp-admin llamada $ pagenow que contiene el nombre de la página actual, es decir, edit.php, post.php, etc.

También puede consultar la solicitud $ _GET para reducir aún más su ubicación, por ejemplo:

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

    }
    
respondido por el goldenapples 19.01.2011 - 19:48
13

El método más completo es get_current_screen agregado en WordPress 3.1

$screen = get_current_screen();

devuelve

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
    
respondido por el Louis-Rémi 06.09.2013 - 15:41
8

Para ofrecer un método / enfoque alternativo a la pregunta anterior.

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

Este método se enfoca en las páginas específicas de manera más directa y evita la necesidad de una lógica condicional dentro de su devolución de llamada (porque ya hizo esa distinción en el enlace seleccionado).

    
respondido por el t31os 27.01.2011 - 16:53
1

Me resulta extraño que nadie haya mencionado el hecho de que la función add_menu_page devuelve un enlace de acción que puede utilizar para realizar ciertas acciones solo en esas páginas

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

Si necesita el $ hook y no agregó la página del menú, el documento es aquí

Por ejemplo, el enlace para una página de menú de nivel superior es

  

load-toplevel_page_ $ MenuSlug

El enlace para una página de submenú es

  

load- $ MenuSlug_page_ $ SubMenuSlug

Siguiendo esa lógica, el enlace para la página de perfil del usuario es

  

load-users_page_profile

    
respondido por el Tofandel 24.10.2017 - 20:28

Lea otras preguntas en las etiquetas