Bagaimana saya dapat memeriksa untuk melihat apakah pengguna yang masuk saat ini adalah administrator atau editor?
Saya tahu bagaimana melakukannya secara individual:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
Tetapi bagaimana saya bekerja bersama-sama? Yaitu, pengguna adalah administrator atau editor?
users
user-roles
andy
sumber
sumber
if( current_user_can('editor') || current_user_can('administrator') )
Jawaban:
Jawaban pertama, bukan yang terkait dengan WordPress karena hanya PHP: Gunakan operator logika "ATAU":
Jika Anda ingin memeriksa lebih dari dua peran, Anda dapat memeriksa apakah peran pengguna saat ini ada di dalam array peran, sesuatu seperti:
Namun,
current_user_can
dapat digunakan tidak hanya dengan nama peran pengguna, tetapi juga dengan kemampuan.Jadi, begitu editor dan administrator dapat mengedit halaman, hidup Anda bisa lebih mudah memeriksa kemampuan itu:
Lihat di sini untuk informasi lebih lanjut tentang kemampuan.
sumber
is_logged_in();
?current_user_can()
selalu mengembalikan false jika pengguna tidak masuk, danwp_get_current_user()
akan mengembalikan pengguna tanpa peran apa pun jika pengguna tidak masuk, sehinggaarray_intersect()
akan selalu salah.current_user_can()
fungsi, kita dapat melihat baris " Sementara memeriksa peran tertentu di tempat kemampuan didukung sebagian, praktik ini tidak dianjurkan karena dapat menghasilkan hasil yang tidak dapat diandalkan ". Jadi saya pikir akan lebih baik untuk menghindari menggunakan peran sambil memeriksa kemampuan pengguna :-)array_intersect
metode ini, saya mendapatkan peringatan PHP di server kami mengatakan kesalahan logarray_intersect(): Argument #2 is not an array
. Apakah ini karena pengguna yang memeriksa hanya memiliki satu Peran?array_intersect($allowed_roles, (array)$user->roles )
akan bekerja tanpa masalah.Pertama,
current_user_can()
tidak boleh digunakan untuk memeriksa peran pengguna - itu harus digunakan untuk memeriksa apakah pengguna memiliki kemampuan tertentu .Kedua, alih-alih memusatkan perhatian pada peran pengguna tetapi alih-alih berfokus pada kemampuan, Anda tidak perlu repot melakukan hal-hal seperti masalah yang ditanyakan dalam pertanyaan awal (yang memeriksa apakah pengguna adalah administrator atau editor). Alih-alih, jika
current_user_can()
digunakan sebagaimana dimaksud, yaitu untuk memeriksa kemampuan pengguna, bukan peran mereka, Anda tidak akan memerlukan pemeriksaan bersyarat untuk memuat tes "atau" (||). Sebagai contoh:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages adalah kapabilitas dari peran administrator dan editor, tetapi tidak pada peran yang lebih rendah seperti penulis. Inilah
current_user_can()
yang dimaksudkan untuk digunakan.sumber
current_user_can
umumnya harus digunakan untuk kemampuan, bukan peran.Sebagai balasan @butlerblog dinyatakan, Anda seharusnya tidak menggunakan current_user_can untuk memeriksa peran
Pemberitahuan ini secara khusus ditambahkan dalam dokumentasi PHP tentang
has_cap
fungsi yang dipanggil olehcurrent_user_can
Cara CORRECT untuk melakukan ini adalah untuk mendapatkan pengguna dan memeriksa
$user->roles
, seperti ini:Berikut adalah beberapa fungsi pembantu yang saya gunakan untuk melakukan ini (karena kadang-kadang saya tidak ingin hanya pengguna saat ini):
Maka Anda bisa melakukan ini:
current_user_has_role( 'editor' );
atau
current_user_has_role( array( 'editor', 'administrator' ) );
sumber
sumber