¿Cómo puedes verificar si estás en una página específica en la sección de administración de WordPress? Por ejemplo, ¿cómo puedo verificar si estoy en la página Usuarios > Tu Perfil?

19 ene 2011, 20:37:31
Vistas: 84.6K
Votos: 57

Estoy desarrollando un plugin y quiero agregar fragmentos de JavaScript en el head del administrador, pero solo para ciertas páginas administrativas. No me refiero a páginas como las que creas en WordPress, sino a las páginas existentes de la sección de administración como 'Tu Perfil', 'Usuarios', etc. ¿Existe una función específica de WordPress para esta tarea? He estado buscando y solo puedo encontrar la función booleana is_admin y hooks de acciones, pero no una función booleana que simplemente verifique.

1
Comentarios

Recordatorio amable de que no se ha aceptado una respuesta. Si ninguna de las respuestas proporcionadas responde suficientemente a tu pregunta o tienes dificultades para entender la información proporcionada, por favor comenta para hacérnoslo saber.

t31os t31os
24 feb 2011 19:21:49
Todas las respuestas a la pregunta 5
3
86

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

También puedes verificar la solicitud $_GET para delimitar aún más tu ubicación, por ejemplo:

global $pagenow;
if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) {

    // editando una página

    }

if ($pagenow == 'users.php') {

    // página de listado de usuarios

    }

if ($pagenow == 'profile.php') {

    // página de edición de perfil de usuario

    }
19 ene 2011 20:48:59
Comentarios

global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { lógica.. } por ejemplo verifica si estás en una página de configuración de tema personalizada admin.php?page=prefix-theme-settings.

lowtechsun lowtechsun
14 feb 2018 23:01:13

gracias. Esta es una gran respuesta y me ayudó.

Abilash Erikson Abilash Erikson
5 nov 2021 13:06:33

Esto es perfecto. ¡Muchas gracias! Intenté con la variable global $wp, pero la propiedad request permanecía vacía ahí.

Daan van den Bergh Daan van den Bergh
2 feb 2023 15:29:28
5
35

El método más completo es get_current_screen añadido 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] => 
)
6 sept 2013 16:41:24
Comentarios

"Restricciones de uso --

Esta función está definida en la mayoría de las páginas de administración, pero no en todas. Por lo tanto, hay casos en los que is_admin() devolverá verdadero, pero intentar llamar a get_current_screen() resultará en un error fatal porque no está definido. Un ejemplo conocido es wp-admin/customize.php.

La función devuelve nulo si se llama desde el hook admin_init. Debería ser seguro usarlo en un hook posterior como current_screen." -- Codex.

That Brazilian Guy That Brazilian Guy
26 ene 2018 18:17:44

@ThatBrazilianGuy Una verificación rápida sugiere que esto ya no es así, por lo que puedo ver get_current_screen() es seguro de usar en todas las páginas de administración.

Steven Steven
27 ene 2019 10:31:50

@shahar esto sigue siendo así, según la documentación enlazada arriba y mi experiencia.

fabrik fabrik
14 mar 2019 10:37:27

sigue siendo el caso. Puedes reproducirlo al crear un plugin y luego activarlo. Esto generará un error fatal durante la activación ya que estás en una página donde la función no está definida :(

seawave_23 seawave_23
4 ene 2021 16:34:23

siempre puedes verificar y salir con if (!function_exists('get_current_screen')) return ; si tu lógica depende de ello :)

jave.web jave.web
26 feb 2021 03:41:16
0
32

La forma de hacer esto es usar el hook 'admin_enqueue_scripts' para encolar los archivos que necesites. Este hook recibirá un parámetro $hook_suffix que se relaciona con la página actual que se está cargando:

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');
19 ene 2011 21:08:39
1
11

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

// Cuando estás viendo la lista de usuarios o editando el perfil de otro usuario
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// Cuando estás editando tu propio perfil
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. TUS ARGUMENTOS DE ENCOLAMIENTO .. );
}

Este método apunta a las páginas específicas de manera más directa y evita la necesidad de lógica condicional dentro de tu función de callback (porque ya has hecho esa distinción en el hook seleccionado).

27 ene 2011 17:53:16
Comentarios

Ojalá supiera por qué esta respuesta no obtuvo más votos, cubre exactamente el caso de uso de la pregunta y proporciona la solución con una cantidad mínima de código. Sería bueno recibir retroalimentación..

t31os t31os
28 ene 2014 16:56:58
0

Me parece extraño que nadie haya mencionado el hecho de que la función add_menu_page devuelve un hook de acción que puedes usar 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 necesitas el $hook y no agregaste el menú tú mismo, la documentación está aquí

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

load-toplevel_page_$MenuSlug

El hook para una página de submenú es

load-$MenuSlug_page_$SubMenuSlug

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

load-users_page_profile

24 oct 2017 21:28:18