Comment obtenir le rôle de l'utilisateur


15

J'ai besoin d'obtenir le rôle associé à un utilisateur - pas "l'utilisateur actuellement connecté".

J'utilise Buddypress (ce n'est pas important pour la nature de cette question) et je suis dans la bp_members()boucle.

Comment puis-je récupérer le rôle de l'utilisateur sur lequel je fais un rapport dans la boucle à un moment donné?

Merci.

Réponses:


17

Utilisez l'ID utilisateur et WP_User:

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

Mise à jour

/**
 * 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
)

Merci @toscho - cela ne m'a pas semblé m'attendre. J'ai obtenu un éditeur, une valeur vide / nulle et bbp_participant. Je m'attendais à voir Admin, Editor, Author ou Subscriber car ce sont les seuls rôles que nous utilisons.
frank13

@ frank13 Voir ma mise à jour.
fuxia

2
Merci @toscho ... c'est beaucoup de code pour obtenir une valeur de données que j'aurais pensé être plus facilement disponibles.
frank13

Très utile, merci! Tellement triste et déroutant, pourquoi vous ne pouvez pas accéder plus directement au rôle de l'utilisateur. La fonction "peut utilisateur" fonctionne à l'opposé de ce que la plupart des gens voudraient.
Mike

7

Si bp_membersrenvoie un tableau d' WP_Userobjets, chacun doit avoir une propriété rolesqui contient un tableau des rôles d'utilisateurs.

Sinon, vous pouvez utiliser get_user_metapour la clé wp_capabilities, qui renverra un tableau de role => capabilitypaires:

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

$ roles finit par être un tableau. Je cherche à obtenir le $user->IDrôle de. Un seul rôle car aucun utilisateur de notre système ne se voit attribuer plus d'un rôle.
frank13

$roles[0], terminé.
chrisguitarguy

Ok, merci @ChristopherDavis ... $ roles [0] renvoie "0" dans tous les
domaines

@chrisguitarguy est-ce que $ roles [0] fonctionne toujours?
T.Todua

0

Si je comprends bien, cela a probablement changé au fil des ans, maintenant ce n'est pas le cas 'wp_capabilities'. J'ai regardé les fichiers WP principaux, comment ils le font maintenant, et j'ai trouvé une nouvelle solution à cela. Voici le code que j'utilise maintenant:

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap vient ensuite comme un tableau associatif, par exemple:

{
    "administrator": true
}

ou

{
    "subscriber": true
}

Donc, dans votre cas, vous devriez probablement récupérer les clés du tableau:

$caps_array = array_keys( $cap );

et puis tout en tirer. J'avais besoin de voir si l'utilisateur avait le rôle d'administrateur, j'ai donc vérifié:

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

J'avais un ID utilisateur, pas tout l' WP_Userobjet, et je ne voulais pas utiliser de solution qui créerait l' userobjet. Comme je l'ai vérifié, get_user_metava directement à la base de données pour vérifier ce paramètre exact, donc cela devrait être l'itinéraire le plus rapide et le plus efficace en termes de ressources.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.