Come puoi verificare se ti trovi in una pagina specifica nella sezione WP Admin? Ad esempio, come posso controllare se sono nella pagina Utenti > Il tuo profilo?

19 gen 2011, 20:37:31
Visualizzazioni: 84.6K
Voti: 57

Sto sviluppando un plugin e voglio aggiungere del codice JavaScript nell'header dell'area amministrativa, ma solo per determinate pagine admin. Non mi riferisco alle pagine create in WordPress, ma piuttosto alle pagine esistenti della sezione amministrativa come 'Il tuo profilo', 'Utenti', ecc. Esiste una funzione WordPress specifica per questo scopo? Ho cercato e ho trovato solo la funzione booleana is_admin e gli action hook, ma non una funzione booleana che faccia semplicemente questo controllo.

1
Commenti

Gentile promemoria per ricordarti che una risposta non è stata accettata. Se nessuna delle risposte fornite risponde sufficientemente alla tua domanda o hai difficoltà a comprendere le informazioni fornite, per favore commenta per farcelo sapere.

t31os t31os
24 feb 2011 19:21:49
Tutte le risposte alla domanda 5
3
86

Esiste una variabile globale in wp-admin chiamata $pagenow che contiene il nome della pagina corrente, come edit.php, post.php, ecc.

Puoi anche controllare la richiesta $_GET per individuare con maggiore precisione la tua posizione, ad esempio:

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

    // modifica di una pagina

    }

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

    // pagina di elenco utenti

    }

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

    // pagina di modifica profilo utente

    }
19 gen 2011 20:48:59
Commenti

global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. } ad esempio verifica se ti trovi su una pagina di impostazioni del tema personalizzato admin.php?page=prefix-theme-settings.

lowtechsun lowtechsun
14 feb 2018 23:01:13

grazie. Questa è una risposta fantastica e mi è stata molto utile.

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

È perfetto. Grazie mille! Ho provato la variabile globale $wp, ma la proprietà request rimaneva vuota lì.

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

Il metodo più completo è get_current_screen aggiunto in WordPress 3.1

$screen = get_current_screen();

restituisce

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
6 set 2013 16:41:24
Commenti

"Restrizioni d'uso --

Questa funzione è definita nella maggior parte delle pagine di amministrazione, ma non in tutte. Quindi ci sono casi in cui is_admin() restituirà true, ma il tentativo di chiamare get_current_screen() risulterà in un errore fatale perché non è definita. Un esempio noto è wp-admin/customize.php.

La funzione restituisce null se chiamata dall'hook admin_init. Dovrebbe essere sicuro usarla in un hook successivo come current_screen." -- Codex.

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

@ThatBrazilianGuy Un rapido controllo suggerisce che questo non sia più il caso, per quanto posso vedere get_current_screen() è sicuro da usare su tutte le pagine di amministrazione.

Steven Steven
27 gen 2019 10:31:50

@shahar questo è ancora valido, secondo la documentazione linkata sopra e la mia esperienza.

fabrik fabrik
14 mar 2019 10:37:27

è ancora così. Puoi riprodurlo creando un plugin e poi attivandolo. Questo genererà un errore fatale durante l'attivazione poiché ti trovi su una pagina dove la funzione non è definita :(

seawave_23 seawave_23
4 gen 2021 16:34:23

puoi sempre verificare&uscire if (!function_exists('get_current_screen')) return ; se la tua logica dipende da essa :)

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

Il modo per farlo è utilizzare l'hook 'admin_enqueue_scripts' per accodare i file necessari. Questo hook riceverà un parametro $hook_suffix che si riferisce alla pagina corrente che è stata caricata:

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 gen 2011 21:08:39
1
11

Per offrire un metodo/approccio alternativo alla domanda precedente.

// Quando stai visualizzando l'elenco degli utenti o modificando il profilo di un altro utente
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// Quando stai modificando il tuo profilo personale
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. I TUOI ARGOMENTI DI ENQUEUE .. );
}

Questo metodo si rivolge alle pagine specifiche in modo più diretto ed evita la necessità di logiche condizionali all'interno della tua callback (perché hai già fatto questa distinzione nell'hook selezionato).

27 gen 2011 17:53:16
Commenti

Vorrei sapere perché questa risposta non abbia ricevuto più voti, affronta esattamente il caso d'uso nella domanda e fornisce la soluzione con una quantità minima di codice. Un feedback sarebbe gradito..

t31os t31os
28 gen 2014 16:56:58
0

Trovo strano che nessuno abbia menzionato il fatto che la funzione add_menu_page restituisce un action hook che puoi utilizzare per eseguire determinate azioni solo su quelle pagine

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

Se hai bisogno dell'$hook e non hai aggiunto tu la pagina del menu, la documentazione è qui

Ad esempio l'hook per una pagina di menu di primo livello è

load-toplevel_page_$MenuSlug

L'hook per una pagina di sottomenu è

load-$MenuSlug_page_$SubMenuSlug

Seguendo questa logica, l'hook per la pagina del profilo utente è

load-users_page_profile

24 ott 2017 21:28:18