@butlerblog의 답변에서 언급했듯이 current_user_can을 사용하여 역할을 확인해서는 안됩니다.
이 공지는 PHP has_cap
함수에서 호출 한 함수 에 특별히 추가되었습니다.current_user_can
기능 대신 역할에 대한 검사가 부분적으로 지원되지만 신뢰할 수없는 결과를 생성 할 수 있으므로이 방법은 권장하지 않습니다.
이를 수행하는 올바른 방법은 사용자를 가져 와서 다음과 같이 확인하는 $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' ) );
if( current_user_can('editor') || current_user_can('administrator') )