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?
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.

Î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
}

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
.

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] =>
)

"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.

@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.

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

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ă :(

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');

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).

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
