Cum poți verifica dacă te afli într-o anumită pagină din secțiunea Admin WP? De exemplu, cum pot verifica dacă sunt în pagina Utilizatori > Profilul tău?

19 ian. 2011, 20:37:31
Vizualizări: 84.6K
Voturi: 57

Construiesc un plugin și vreau să adaug bucăți de javascript în header-ul de admin, dar doar pentru anumite pagini de administrare. Nu mă refer la pagini ca cele create de tine în WordPress, ci mai degrabă la paginile existente din secțiunea de administrare precum 'Profilul tău', 'Utilizatori', etc. Există o funcție wp special pentru această sarcină? Am căutat și pot găsi doar funcția booleană is_admin și hook-uri de acțiune, dar nu o funcție booleană care doar să verifice.

1
Comentarii

Un mic îndemn pentru a vă reaminti că nu a fost acceptat niciun răspuns. Dacă niciunul dintre răspunsurile oferite nu vă răspunde suficient la întrebare sau dacă aveți dificultăți în înțelegerea informațiilor furnizate, vă rugăm să comentați pentru a ne anunța.

t31os t31os
24 feb. 2011 19:21:49
Toate răspunsurile la întrebare 5
3
86

În wp-admin există o variabilă globală numită $pagenow care stochează numele paginii curente, cum ar fi edit.php, post.php, etc.

De asemenea, puteți verifica cererea $_GET pentru a vă localiza mai precis, de exemplu:

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

    // editarea unei pagini

    }

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

    // pagina de listare a utilizatorilor

    }

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

    // pagina de editare a profilului utilizatorului

    }
19 ian. 2011 20:48:59
Comentarii

global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. } de exemplu verifică dacă te afli pe o pagină personalizată de setări pentru temă admin.php?page=prefix-theme-settings.

lowtechsun lowtechsun
14 feb. 2018 23:01:13

mulțumesc. Acesta este un răspuns excelent și m-a ajutat.

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

Este perfect. Mulțumesc mult! Am încercat variabila globală $wp, dar proprietatea request rămânea goală acolo.

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

Cea mai cuprinzătoare metodă este get_current_screen adăugată în WordPress 3.1

$screen = get_current_screen();

returnează

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
Comentarii

"Restricții de utilizare --

Această funcție este definită pe majoritatea paginilor de administrare, dar nu pe toate. Astfel, există cazuri în care is_admin() va returna true, dar încercarea de a apela get_current_screen() va rezulta într-o eroare fatală deoarece nu este definită. Un exemplu cunoscut este wp-admin/customize.php.

Funcția returnează null dacă este apelată din hook-ul admin_init. Ar trebui să fie OK de utilizat într-un hook ulterior precum current_screen." -- Codex.

That Brazilian Guy That Brazilian Guy
26 ian. 2018 18:17:44

@ThatBrazilianGuy O verificare rapidă sugerează că această situație nu mai există, din câte văd get_current_screen() este sigur de utilizat pe toate paginile de administrare.

Steven Steven
27 ian. 2019 10:31:50

@shahar această situație încă există, conform documentației menționate mai sus și din experiența mea.

fabrik fabrik
14 mar. 2019 10:37:27

este încă situația. Poți reproduce problema atunci când creezi un plugin și apoi îl activezi. Acest lucru va genera o eroare fatală la activare, deoarece te afli pe o pagină unde funcția nu este definită :(

seawave_23 seawave_23
4 ian. 2021 16:34:23

poți întotdeauna să verifici și să ieși if (!function_exists('get_current_screen')) return ; dacă logica ta depinde de aceasta :)

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

Modul de a face acest lucru este să folosești hook-ul 'admin_enqueue_scripts' pentru a încărca fișierele de care ai nevoie. Acest hook va primi un parametru $hook_suffix care se referă la pagina curentă încărcată:

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

Pentru a oferi o metodă/abordare alternativă la întrebarea de mai sus.

// Când vizualizați lista de utilizatori sau editați profilul altui utilizator
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// Când editați propriul profil
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. ARGUMENTELE DVS. PENTRU ENQUEUE .. );
}

Această metodă vizează paginile specifice mai direct și evită necesitatea unei logici condiționale în interiorul funcției callback (deoarece ați făcut deja această distincție în hook-ul selectat).

27 ian. 2011 17:53:16
Comentarii

Aș fi vrut să știu de ce acest răspuns nu a primit mai multe voturi, acoperă exact cazul de utilizare din întrebare și oferă soluția într-o cantitate minimă de cod. Feedback-ul ar fi fost binevenit..

t31os t31os
28 ian. 2014 16:56:58
0

Mi se pare ciudat că nimeni nu a menționat faptul că funcția add_menu_page returnează un action hook pe care îl poți folosi pentru a efectua anumite acțiuni doar pe acele pagini

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

Dacă ai nevoie de $hook și nu ai adăugat tu pagina de meniu, documentația este aici

De exemplu, hook-ul pentru o pagină de meniu de nivel superior este

load-toplevel_page_$MenuSlug

Hook-ul pentru o pagină de submeniu este

load-$MenuSlug_page_$SubMenuSlug

Urmând această logică, hook-ul pentru pagina de profil a utilizatorului este

load-users_page_profile

24 oct. 2017 21:28:18