사용자가 특정 역할에 있는지 확인하는 방법


59

현재 사용자의 역할에 따라 사용자 프로필 페이지의 필드 레이블에 다른 텍스트를 표시 해야하는 특정 요구 사항이 있습니다. 현재 사용이 "저자"인지 확인하는 방법을 알 수 없습니다.

다음과 같은 기능을 찾고 있습니다.

is_user_in_role($user, "author");

나는 이것이 매우 간단하다고 생각하지만 대답없이 너무 오랫동안 검색하여 여기에 게시 할 것이라고 생각했습니다.

답변:


113

현재 사용자에게만 필요한 경우 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
}

10
이 게시물이 오래 전에 답변되었다는 것을 알고 있지만 누군가가 여기에 도착하면 current_user_can ()-> "역할 이름을 current_user_can ()에 전달하지 마십시오. 제대로 작동합니다 (# 22624 참조). 대신 AppThemes에서 제공하는 사용자 역할 확인 기능을 사용해보십시오. " ( codex.wordpress.org/Function_Reference/current_user_can )
최고의 프로그래밍 세계에서

1
^ if 문에 대괄호가 없습니다
Aajahid

1
@Aajahid 편집 :)
Rarst

10

사용자 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 ) );
}

1
사용자에게 첫 번째 역할을 할당하는 것이 좋습니다.
Q Studio

사용자에게 할당 된 모든 역할은 어떻습니까?
Vishal Kumar Sahu

1
@Vishal Kumar 사용자에게 할당 된 모든 역할과 대조합니다.
Stephen M. Harris

이 함수는 존재하지 않습니다. 오래되었거나 무엇인지 확실하지 않지만 위의 답변 또는 아래에 게시 한 답변을 사용해야합니다.
sMyles

2

새 사용자 객체를 만들 수도 있습니다.

$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에서 제거 되었는지 확실 하지 않지만 더 이상 사용 가능한 기능이 아닙니다.


이것은 WP_User 클래스의 다른 메소드를 호출해야 할 때 편리합니다.
Justin Waulters

0

유연성을 높이기 위해 사용자와 역할을 받아들이는 기능은 다음과 같습니다.

my_has_role 함수 ($ user, $ role) {
  $ roles = $ user-> 역할; 
  return in_array ($ role, (배열) $ user-> roles);
}

if (my_has_role ($ user, 'some_role')) {
  // 물건
}

0

사용자 개체에서 역할을 호출 $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;
       }
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.