正如@butlerblog回复所述,you should not use current_user_can to check against a role
此通知专门添加在的PHP文档中has_cap
调用的函数current_user_can
虽然在一定程度上支持对角色代替功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。
这个CORRECT 方法是让用户检查$user->roles
, 像这样:
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 );
}
}
下面是我用来实现这一点的一些助手函数(因为有时我不想只需要当前用户):
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 );
}
}
然后你可以这样做:
current_user_has_role( \'editor\' );
或
current_user_has_role( array( \'editor\', \'administrator\' ) );