Respostas:
Use o ID do usuário e 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;
}
Exemplo de uso:
print '<pre>'
. htmlspecialchars(
print_r( wpse_58916_user_roles_by_id(1), TRUE )
)
. '</pre>';
Array
(
[administrator] => Administrator
)
Se bp_members
retornar uma matriz de WP_User
objetos, cada um deverá ter a propriedade roles
que contém uma matriz das funções dos usuários.
Caso contrário, você pode usar get_user_meta
a chave wp_capabilities
, que retornará uma matriz de role => capability
pares:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
$user->ID
papel do. Apenas uma função, como nenhum usuário em nosso sistema, recebe mais de uma função.
$roles[0]
, feito.
Pelo que entendi, provavelmente mudou ao longo dos anos, agora não é 'wp_capabilities'
. Examinei os arquivos principais do WP, como eles o fazem agora e encontrei uma nova solução para isso. Aqui está o código que eu uso agora:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap
então vem como uma matriz associativa, por exemplo:
{
"administrator": true
}
ou
{
"subscriber": true
}
Portanto, no seu caso, você provavelmente deve obter as chaves da matriz:
$caps_array = array_keys( $cap );
e então obtenha tudo disso. Eu precisava ver se o usuário tem a função de administrador, então verifiquei:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
Eu tinha um ID do usuário, não o WP_User
objeto inteiro , e não queria usar nenhuma solução que pudesse criar o user
objeto. Como eu verifiquei, get_user_meta
vai direto para o banco de dados para verificar esse parâmetro exato, portanto essa deve ser a rota mais rápida e com mais recursos.