web-dev-qa-db-fra.com

Comment vérifier si un utilisateur occupe un rôle spécifique?

J'ai une exigence assez spécifique pour afficher un texte différent dans une étiquette de champ sur la page de profil de l'utilisateur en fonction du rôle de l'utilisateur actuel. Je n'arrive pas à comprendre comment vérifier si l'utilisation actuelle est un "auteur".

Je cherche une fonction comme:

is_user_in_role($user, "author");

J'imagine que c'est assez simple, mais j'ai trop longtemps cherché sans réponse, alors j'ai pensé le poster ici.

53
jessegavin

Si vous n'en avez besoin que pour l'utilisateur actuel current_user_can() accepte les rôles et les fonctionnalités.

UPDATE: Il n'est plus garanti que le fait de passer un nom de rôle à current_user_can() fonctionne correctement (voir # 22624 ). Au lieu de cela, vous voudrez peut-être vérifier le rôle de l'utilisateur:

$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
}
101
Rarst

Je cherchais un moyen d'obtenir le rôle d'un utilisateur à l'aide de son identifiant. Voici ce que je suis venu avec:

function get_user_roles_by_user_id( $user_id ) {
    $user = get_userdata( $user_id );
    return empty( $user ) ? array() : $user->roles;
}

Ensuite, une fonction is_user_in_role() pourrait être implémentée de la manière suivante:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
9
Stephen M. Harris

Vous pouvez également simplement créer un nouvel objet utilisateur:

$user = new WP_User( $user_id );

if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
    return true;
}

Vous ne savez pas dans quelle version get_user_roles_by_user_id a été supprimée, mais ce n'est plus une fonction disponible.

1
sMyles

Voici une fonction qui accepte un utilisateur et un rôle pour une plus grande flexibilité:

 function my_has_role ($ user, $ role) {
 $ roles = $ user-> roles; 
 return in_array ($ rôle, (tableau) $ utilisateur-> rôles); 
} 
 
 if (mon_has_role ($ utilisateur, 'un_role'))) { 
  //faire des trucs
}
0
Ben