¿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> Tu perfil?

32

Estoy construyendo un complemento y quiero agregar bits de javascript en el cabezal de administración, pero solo para ciertas páginas de administración. No me refiero a páginas como en una página de WordPress que creas tú mismo, sino a páginas de la sección de administración existentes como 'Tu 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_adminy los ganchos de acción, pero no una función booleana que solo verifica.

racl101
fuente
1
Toque suavemente para recordarle que no se ha aceptado una respuesta. Si ninguna de las respuestas proporcionadas responde a su pregunta lo suficiente o si tiene dificultades para comprender la información proporcionada, comente para informarnos.
t31os

Respuestas:

24

La forma de hacerlo es utilizar el enlace 'admin_enqueue_scripts' para poner en cola los archivos que necesita. Este enlace 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');
prettyboymp
fuente
55

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 verificar 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

    }
goldenapples
fuente
1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }por ejemplo, comprueba si está en una página de configuración de tema personalizada admin.php?page=prefix-theme-settings.
lowtechsun
19

El método más completo se get_current_screenagrega en WordPress 3.1

$screen = get_current_screen();

devoluciones

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
Louis-Rémi
fuente
3
"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 () dará como resultado un error fatal porque no está definido. Uno el ejemplo conocido es wp-admin / personalizar.php. La función devuelve nulo si se llama desde el enlace admin_init. Debería estar bien usarlo en un enlace posterior como current_screen. "- Codex .
Ese chico brasileño el
@ThatBrazilianGuy Una comprobación rápida sugiere que este ya no es el caso, por lo que puedo ver, get_current_screen()es seguro usarlo en todas las páginas de administración.
Shahar
1
@shahar este sigue siendo el caso, de acuerdo con la documentación vinculada anteriormente y mi experiencia.
fabrik
9

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 apunta a las páginas específicas más directamente y evita la necesidad de una lógica condicional dentro de su devolución de llamada (porque ya ha hecho esa distinción en el enlace seleccionado).

t31os
fuente
Ojalá supiera por qué esta respuesta no obtuvo más votos, cubre el caso de uso exacto en la pregunta y proporciona la solución en una cantidad mínima de código. La retroalimentación sería buena ..
t31os
3

Me parece extraño que nadie haya mencionado el hecho de que la función add_menu_page devuelve un enlace de acción que puede 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 necesita el $ hook y no agregó la página del menú usted mismo, el documento está aquí

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

load-toplevel_page_ $ MenuSlug

El gancho para una página de submenú es

cargar- $ MenuSlug_page_ $ SubMenuSlug

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

load-users_page_profile

Tofandel
fuente