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

44

J'ai une exigence assez spécifique: 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 recherche une fonction du type:

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.

    
posée jessegavin 08.12.2010 - 16:47

4 réponses

86

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 transfert d'un nom de rôle à current_user_can() fonctionne correctement (voir # 22624 ). Au lieu de cela, vous souhaiterez 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
}
    
réponse donnée Rarst 08.12.2010 - 16:54
9

Je recherchais 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 comme suit:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
    
réponse donnée Stephen M. Harris 11.06.2012 - 16:18
1

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.

    
réponse donnée sMyles 16.11.2017 - 01:44
0

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($role, (array) $user->roles);
}

if(my_has_role($user, 'some_role')) {
  //do stuff
}
    
réponse donnée Ben 29.11.2017 - 00:05

Lire d'autres questions sur les étiquettes