답변:
사용자 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
)
객체 bp_members
배열을 반환하는 경우 WP_User
각 roles
사용자 역할 배열이 포함 된 속성 이 있어야 합니다.
그렇지 않으면 get_user_meta
key를 사용할 수 있습니다 wp_capabilities
.이 배열은 role => capability
쌍 의 배열을 반환합니다 .
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
$user->ID
의 역할을 수행 하려고합니다 . 시스템에 사용자가없는 역할은 하나 이상의 역할 만 할당됩니다.
$roles[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_meta
db로 직접 이동 하여이 정확한 매개 변수를 확인하므로 가장 빠르고 리소스 효율적인 경로 여야합니다.