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
Sementara memeriksa peran sebagai pengganti kemampuan didukung sebagian, praktik ini tidak dianjurkan karena dapat menghasilkan hasil yang tidak dapat diandalkan.
Cara CORRECT untuk melakukan ini adalah untuk mendapatkan pengguna dan memeriksa $user->roles
, seperti ini:
if( ! function_exists( 'current_user_has_role' ) ){
function current_user_has_role( $role ) {
$user = get_userdata( get_current_user_id() );
if( ! $user || ! $user->roles ){
return false;
}
if( is_array( $role ) ){
return array_intersect( $role, (array) $user->roles ) ? true : false;
}
return in_array( $role, (array) $user->roles );
}
}
Berikut adalah beberapa fungsi pembantu yang saya gunakan untuk melakukan ini (karena kadang-kadang saya tidak ingin hanya pengguna saat ini):
if( ! function_exists( 'current_user_has_role' ) ){
function current_user_has_role( $role ){
return user_has_role_by_user_id( get_current_user_id(), $role );
}
}
if( ! function_exists( 'get_user_roles_by_user_id' ) ){
function get_user_roles_by_user_id( $user_id ) {
$user = get_userdata( $user_id );
return empty( $user ) ? array() : $user->roles;
}
}
if( ! function_exists( 'user_has_role_by_user_id' ) ){
function user_has_role_by_user_id( $user_id, $role ) {
$user_roles = get_user_roles_by_user_id( $user_id );
if( is_array( $role ) ){
return array_intersect( $role, $user_roles ) ? true : false;
}
return in_array( $role, $user_roles );
}
}
Maka Anda bisa melakukan ini:
current_user_has_role( 'editor' );
atau
current_user_has_role( array( 'editor', 'administrator' ) );
if( current_user_can('editor') || current_user_can('administrator') )