Bagaimana Anda bisa memeriksa apakah Anda berada di halaman tertentu di bagian Admin WP? Misalnya bagaimana saya bisa mengecek apakah saya ada di halaman Users> Your Profile?

32

Saya sedang membangun sebuah plugin dan saya ingin menambahkan bit javascript di kepala admin tetapi hanya untuk halaman admin tertentu. Maksud saya bukan halaman seperti pada halaman WordPress yang Anda buat sendiri tetapi halaman admin yang ada seperti 'Profil Anda', 'Pengguna', dll. Apakah ada fungsi wp khusus untuk tugas ini? Saya telah mencari dan saya hanya dapat menemukan fungsi boolean is_admindan kait tindakan tetapi bukan fungsi boolean yang hanya memeriksa.

racl101
sumber
1
Dorongan lembut untuk mengingatkan Anda jawaban belum diterima. Jika tidak ada jawaban yang diberikan, jawab pertanyaan Anda secukupnya atau Anda kesulitan memahami informasi yang diberikan, silakan beri komentar untuk memberi tahu kami.
t31os

Jawaban:

24

Cara untuk melakukan ini adalah dengan menggunakan kait 'admin_enqueue_scripts' untuk mengirim file ke dalam file yang Anda butuhkan. Hook ini akan melewati $ hook_suffix yang terkait dengan halaman saat ini yang dimuat:

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
sumber
55

Ada variabel global di wp-admin yang disebut $ pagenow yang menyimpan nama halaman saat ini, yaitu edit.php, post.php, dll.

Anda juga dapat memeriksa permintaan $ _GET untuk mempersempit lokasi Anda lebih jauh, misalnya:

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

    }
lempengan emas
sumber
1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }misalnya memeriksa apakah Anda berada di halaman pengaturan tema khusus admin.php?page=prefix-theme-settings.
lowtechsun
19

Metode paling komprehensif get_current_screenditambahkan di WordPress 3.1

$screen = get_current_screen();

kembali

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
sumber
3
"Batasan Penggunaan - Fungsi ini didefinisikan pada sebagian besar halaman admin, tetapi tidak semua. Dengan demikian ada kasus di mana is_admin () akan mengembalikan true, tetapi berusaha memanggil get_current_screen () akan menghasilkan kesalahan fatal karena tidak didefinisikan. Satu contoh yang dikenal adalah wp-admin / customize.php. Fungsi mengembalikan null jika dipanggil dari kait admin_init. Seharusnya OK untuk digunakan dalam kait kemudian seperti current_screen. "- Codex .
Orang Brazil itu
@ ThatBrazilianGuy Pemeriksaan cepat menunjukkan ini tidak lagi terjadi, sejauh yang saya lihat get_current_screen()aman untuk digunakan di semua halaman admin.
shahar
1
@ Shahar, ini masih terjadi, menurut dokumentasi yang ditautkan di atas dan pengalaman saya.
fabrik
9

Untuk menawarkan metode / pendekatan alternatif untuk pertanyaan di atas.

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

Metode ini menargetkan halaman tertentu secara lebih langsung dan menghindari kebutuhan logika kondisional di dalam panggilan balik Anda (karena Anda telah membuat perbedaan itu dalam kait yang dipilih).

t31os
sumber
Seandainya saya tahu mengapa jawaban ini tidak mendapatkan lebih banyak suara, mencakup kasus penggunaan yang tepat dalam pertanyaan, dan memberikan solusi dalam jumlah minimal kode. Umpan balik akan menyenangkan ..
t31os
3

Saya merasa aneh bahwa tidak ada yang menyebutkan fakta bahwa fungsi add_menu_page mengembalikan hook tindakan yang dapat Anda gunakan untuk melakukan tindakan tertentu hanya pada halaman tersebut

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

Jika Anda memerlukan $ hook dan Anda tidak menambahkan halaman menu sendiri, doc ada di sini

Misalnya kait untuk halaman menu tingkat atas adalah

load-toplevel_page_ $ MenuSlug

Hook untuk halaman submenu adalah

memuat- $ MenuSlug_page_ $ SubMenuSlug

Mengikuti logika itu, kait untuk halaman profil pengguna adalah

memuat-users_page_profile

Tofandel
sumber