현재 사용자가 특정 역할(Role)인지를 체크하고 싶은 경우 다음 함수를 테마의 함수 파일에 추가하면 된다.
function check_user_role($roles, $user_id = null) {
if ($user_id) $user = get_userdata($user_id);
else $user = wp_get_current_user();
if (empty($user)) return false;
foreach ($user->roles as $role) {
if (in_array($role, $roles)) {
return true;
}
}
return false;
}
그러면 다음과 같이 사용할 수 있다.
if (check_user_role(array('author','editor','custom_role'))) {
// 수행할 작업
}
역할의 권한을 사용하여 사용자 체크하기:
현재 사용자가 관리자 권한을 가진 경우:
if ( current_user_can( 'manage_options' ) ) {
}
현재 사용자가 편집자 이상(편집자, 관리자)인 경우:
if ( current_user_can( 'delete_others_posts' ) ) {
}
현재 사용자가 글쓴이 이상(글쓴이, 편집자, 관리자)인 경우:
if ( current_user_can( 'publish_posts' ) ) {
}
현재 사용자가 기여자(Contributor) 이상(기여자, 글쓴이, 편집자, 관리자)인 경우:
if ( current_user_can( 'delete_posts' ) ) {
}
current_user_can('administrator')과 같이 current_user_can 함수를 사용할 수 있지만, 권장되지 않음.
대신 다음과 같은 형식으로 사용 가능:
$user = wp_get_current_user();
$allowed_roles = array('administrator','editor');
if(array_intersect($allowed_roles, $user->roles)){
//user have $allowed_roles
}
워드프레스 역할(Role)과 권한:
참고:
- 사용자 역할(회원 등급) 이해/새로운 회원 등급 추가하기
- Only allow administrators and editors to access wp-admin (관리자와 편집자면 wp-admin에 접속하도록 허용하기)
- Check if current user is administrator in wordpress (현재의 사용자가 관리자인지 여부 체크)
- How To Tell Leaky Paywall to Ignore Editors and Other User Roles(Leaky Paywall에 편집자와 다른 사용자 역할을 무시하도록 알려주는 방법)