Je dois obtenir le rôle associé à un utilisateur - pas à "l'utilisateur actuellement connecté".
J'utilise Buddypress (la nature de cette question ne devrait pas être prise en compte) et je suis dans la boucle bp_members()
.
Comment puis-je récupérer le rôle de l'utilisateur sur lequel je rapporte dans la boucle à un moment donné?
Merci.
Utilisez l'ID utilisateur et 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;
}
Exemple d'utilisation:
print '<pre>'
. htmlspecialchars(
print_r( wpse_58916_user_roles_by_id(1), TRUE )
)
. '</pre>';
Array
(
[administrator] => Administrator
)
Si bp_members
renvoie un tableau d'objets WP_User
, chacun devrait avoir la propriété roles
qui contient un tableau des rôles d'utilisateurs.
Sinon, vous pouvez utiliser get_user_meta
pour la clé wp_capabilities
, qui renverra un tableau de paires role => capability
:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
Si j'ai bien compris, cela a probablement changé au fil des ans, maintenant ce n'est pas 'wp_capabilities'
. J'ai examiné les fichiers de base WP, leur mode de fonctionnement actuel, et j'ai trouvé une nouvelle solution. Voici le code que j'utilise maintenant:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap
se présente alors sous la forme d'un tableau associatif, par exemple:
{
"administrator": true
}
ou
{
"subscriber": true
}
Donc, dans votre cas, vous devriez probablement alors obtenir les clés du tableau:
$caps_array = array_keys( $cap );
et puis tout obtenir de celui-ci. J'avais besoin de voir si l'utilisateur avait le rôle d'administrateur, alors j'ai vérifié:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
J'avais un ID utilisateur, pas tout l'objet WP_User
, et je ne voulais utiliser aucune solution qui créerait l'objet user
. Comme j'ai vérifié, get_user_meta
va directement à la base de données pour vérifier ce paramètre exact, ce devrait donc être la route la plus rapide et la plus sage en termes de ressources.