Question

J'ai une jolie exigence 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 ne peux pas sembler 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 je l'ai cherché trop longtemps sans réponse, donc je pensais que je posterais ici.

Était-ce utile?

La solution

Si vous avez seulement besoin cela pour l'utilisateur actuel current_user_can() accepte les rôles et capacités.

UPDATE : Le passage d'un nom de rôle à current_user_can() ne garantit plus correctement au travail (voir # 22624 ). , Vous voudrez peut-être au lieu de 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
}

Autres conseils

Je cherchais un moyen d'obtenir le rôle d'un utilisateur en utilisant l'identifiant de l'utilisateur. 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 mis en œuvre comme ceci:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}

Vous pouvez aussi 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;
}

Je ne sais pas quelle version get_user_roles_by_user_id a été retiré, mais il est plus une fonction disponible.

Voici une fonction qui accepte un utilisateur et le rôle 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
}

Appel rôles sur $user->roles objet utilisateur ne retourne pas tous les rôles. La bonne façon de trouver si l'utilisateur a un rôle ou la capacité suit. (Cela fonctionne en version wp 2.0.0 et plus.) La fonction suivante fonctionne avec l'ID utilisateur vous pouvez obtenir l'ID utilisateur actuel par $current_user_id = get_current_user_id();

/**
 * Returns true if a user_id has a given role or capability
 * 
 * @param int $user_id
 * @param string $role_or_cap Role or Capability
 * 
 * @return boolean
 */
function my_has_role($user_id, $role_or_cap) {

    $u = new \WP_User( $user_id );
    //$u->roles Wrong way to do it as in the accepted answer.
    $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles

    if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) 
       {
           return true;
       }
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top