사용자의 역할을 얻는 방법


15

"현재 로그인 한 사용자"가 아니라 사용자와 관련된 역할을 가져와야합니다.

나는 Buddypress (이 질문의 본질에는 중요하지 않음)를 사용하고 있으며 bp_members()루프에 있습니다.

루프에서보고하는 사용자의 역할을 주어진 시간에 어떻게 검색 할 수 있습니까?

감사.

답변:


17

사용자 ID를 사용하십시오 WP_User.

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

최신 정보

/**
 * Get user roles by user ID.
 *
 * @param  int $id
 * @return array
 */
function wpse_58916_user_roles_by_id( $id )
{
    $user = new WP_User( $id );

    if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
        return array ();

    $wp_roles = new WP_Roles;
    $names    = $wp_roles->get_names();
    $out      = array ();

    foreach ( $user->roles as $role )
    {
        if ( isset ( $names[ $role ] ) )
            $out[ $role ] = $names[ $role ];
    }

    return $out;
}

사용 예 :

print '<pre>' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . '</pre>';

Array
(
    [administrator] => Administrator
)

@toscho에게 감사드립니다-내가 기대했던 것을 얻지 못하는 것 같습니다. 편집자, 공백 / 널 값 및 bbp_participant가 있습니다. Admin, Editor, Author 또는 Subscriber가 우리가 사용하는 유일한 역할이라고 생각합니다.
frank13

@ frank13 내 업데이트를 참조하십시오.
fuxia

2
감사합니다 @toscho ... 더 쉽게 구할 수 있다고 생각했을 데이터 값을 얻는 많은 코드입니다.
frank13

매우 도움이되었습니다. 감사합니다! 너무 슬프고 혼란 스럽기 때문에 사용자의 역할에 더 직접 액세스 할 수없는 이유는 무엇입니까? "사용자 가능"기능은 대부분의 사람들이 원하는 것과 반대되는 기능을합니다.
Mike

7

객체 bp_members배열을 반환하는 경우 WP_Userroles사용자 역할 배열이 포함 된 속성 이 있어야 합니다.

그렇지 않으면 get_user_metakey를 사용할 수 있습니다 wp_capabilities.이 배열은 role => capability쌍 의 배열을 반환합니다 .

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

$ roles는 결국 배열이됩니다. $user->ID의 역할을 수행 하려고합니다 . 시스템에 사용자가없는 역할은 하나 이상의 역할 만 할당됩니다.
frank13

$roles[0]됐다.
chrisguitarguy

감사합니다 @ChristopherDavis ... $ roles [0]은 목록의 모든 사용자에 대해 보드 전체에서 "0"을 반환합니다.
Frank13

@chrisguitarguy는 $ roles [0]가 여전히 작동합니까?
T.Todua

0

알다시피, 아마도 몇 년 동안 바뀌었을 것입니다 'wp_capabilities'. 핵심 WP 파일을 살펴보고 지금 어떻게 수행하는지에 대한 새로운 해결책을 찾았습니다. 내가 지금 사용하는 코드는 다음과 같습니다.

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap 그런 다음 연관 배열로 제공됩니다. 예를 들면 다음과 같습니다.

{
    "administrator": true
}

또는

{
    "subscriber": true
}

따라서 귀하의 경우 아마도 배열의 키를 가져와야합니다.

$caps_array = array_keys( $cap );

그런 다음 모든 것을 얻습니다. 사용자에게 관리자 역할이 있는지 확인해야하므로 확인했습니다.

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

전체 WP_User개체가 아닌 사용자 ID가 있었고 개체를 만드는 솔루션을 사용하고 싶지 않았습니다 user. 내가 확인 한대로 get_user_metadb로 직접 이동 하여이 정확한 매개 변수를 확인하므로 가장 빠르고 리소스 효율적인 경로 여야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.