Comment obtenir le rôle d'utilisateur

13

Je dois obtenir le rôle associé à un utilisateur - et non à "l'utilisateur actuellement connecté".

J'utilise Buddypress (ce n'est pas cela qui devrait avoir une incidence sur la nature de cette question) et je suis dans la boucle bp_members() .

Comment puis-je récupérer le rôle de l'utilisateur que je rapporte dans la boucle à un moment donné?

Merci.

    
posée frank13 18.07.2012 - 21:39

3 réponses

16

Utilisez l'ID utilisateur et WP_User :

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

Mettre à 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
)
    
réponse donnée fuxia 18.07.2012 - 21:57
6

Si bp_members renvoie un tableau d'objets WP_User , chacun d'entre eux doit avoir la propriété roles qui contient un tableau des rôles des utilisateurs.

Sinon, vous pouvez utiliser get_user_meta pour la clé wp_capabilities , qui renverra un tableau de role => capability pairs:

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
    
réponse donnée chrisguitarguy 18.07.2012 - 21:58
0

Si je comprends bien, cela a probablement changé au fil des ans, ce n’est plus 'wp_capabilities' . J'ai examiné les fichiers de base WP, comment ils le font maintenant, et 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 se présente alors sous la forme d'un tableau associatif, par exemple:

{
    "administrator": true
}

ou

{
    "subscriber": true
}

Dans votre cas, vous devriez alors probablement obtenir les clés du tableau:

$caps_array = array_keys( $cap );

et ensuite tout obtenir. 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 l'ensemble de 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 moins gourmande en ressources.

    
réponse donnée Olga Farber 12.11.2016 - 15:44

Lire d'autres questions sur les étiquettes