Come ottenere il ruolo dell'utente


15

Devo ottenere il ruolo associato a un utente, non "l'utente attualmente connesso".

Sto usando Buddypress (non dovrebbe importare la natura di questa domanda) e sono nel bp_members() giro.

Come posso recuperare il ruolo dell'utente che sto segnalando nel ciclo in un dato momento?

Grazie.

Risposte:


17

Usa l'ID utente e WP_User:

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

Aggiornare

/**
 * 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;
}

Esempio di utilizzo:

print '<pre>' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . '</pre>';

Array
(
    [administrator] => Administrator
)

Grazie @toscho - non mi è sembrato quello che mi aspettavo. Ho un editor, un valore vuoto / nullo e bbp_participant. Mi aspettavo di vedere Admin, Editor, Author o Subscriber in quanto questi sono gli unici ruoli che stiamo usando.
frank13,

@ frank13 Vedi il mio aggiornamento.
fuxia

2
Grazie @toscho ... è un sacco di codice per ottenere un valore di dati che avrei pensato sarebbe stato più facilmente disponibile.
frank13,

Molto utile, grazie! Così triste e confuso, perché non puoi accedere al ruolo dell'utente più direttamente. La funzione "can user" funziona al contrario di ciò che la maggior parte delle persone vorrebbe.
Mike,

7

Se bp_membersrestituisce una matrice di WP_Useroggetti, ognuno dovrebbe avere una proprietàroles che contiene una matrice dei ruoli degli utenti.

Altrimenti, è possibile utilizzare get_user_metaper la chiave wp_capabilities, che restituirà una matrice di role => capabilitycoppie:

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

$ ruoli finisce per essere un array. Sto cercando di ottenere il $user->IDruolo di. Solo un ruolo in quanto nessun utente nel nostro sistema è assegnato a più di 1 ruolo.
frank13,

$roles[0], fatto.
chrisguitarguy,

Ok, grazie @ChristopherDavis ... $ ruoli [0] restituisce "0" su tutta la linea per ogni utente nell'elenco
frank13

@chrisguitarguy $ $ [0] funziona ancora?
T.Todua,

0

A quanto ho capito, probabilmente è cambiato nel corso degli anni, ora non lo è 'wp_capabilities'. Ho esaminato i file WP di base, come lo fanno ora e ho trovato una nuova soluzione a questo. Ecco il codice che uso ora:

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

$cap viene quindi come un array associativo, ad esempio:

{
    "administrator": true
}

o

{
    "subscriber": true
}

Quindi nel tuo caso probabilmente dovresti ottenere le chiavi dell'array:

$caps_array = array_keys( $cap );

e quindi ottenere tutto da esso. Avevo bisogno di vedere se l'utente ha il ruolo di amministratore, quindi ho controllato:

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

Avevo un ID utente, non l'intero WP_Useroggetto, e non volevo usare alcuna soluzione che potesse creare l' useroggetto. Come ho verificato, get_user_metava direttamente al db per verificare questo parametro esatto, quindi questo dovrebbe essere il percorso più veloce e saggio delle risorse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.