답변:
현재 사용자에게만 필요한 경우 current_user_can()
역할과 기능을 모두 수락합니다.
업데이트 : 역할 이름을 전달해current_user_can()
도 더 이상 올바르게 작동하지 않을 수 있습니다 ( # 22624 참조 ). 대신 사용자 역할을 확인하고 싶을 수 있습니다.
$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
//The user has the "author" role
}
사용자 ID를 사용하여 사용자 역할을 얻는 방법을 찾고있었습니다. 다음은 내가 생각해 낸 것입니다.
function get_user_roles_by_user_id( $user_id ) {
$user = get_userdata( $user_id );
return empty( $user ) ? array() : $user->roles;
}
그런 다음 is_user_in_role()
함수를 다음 과 같이 구현할 수 있습니다.
function is_user_in_role( $user_id, $role ) {
return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
새 사용자 객체를 만들 수도 있습니다.
$user = new WP_User( $user_id );
if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
return true;
}
어떤 버전 get_user_roles_by_user_id
에서 제거 되었는지 확실 하지 않지만 더 이상 사용 가능한 기능이 아닙니다.
사용자 개체에서 역할을 호출 $user->roles
해도 모든 역할이 반환되지는 않습니다. 사용자에게 역할 또는 기능이 있는지 확인하는 올바른 방법은 다음과 같습니다. (이 기능은 wp 버전 2.0.0 이상에서 작동합니다.) 다음 함수는 사용자 ID와 함께 작동하며 현재 사용자 ID를 가져올 수 있습니다.$current_user_id = get_current_user_id();
/**
* Returns true if a user_id has a given role or capability
*
* @param int $user_id
* @param string $role_or_cap Role or Capability
*
* @return boolean
*/
function my_has_role($user_id, $role_or_cap) {
$u = new \WP_User( $user_id );
//$u->roles Wrong way to do it as in the accepted answer.
$roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles
if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true )
{
return true;
}
}