Come ottenere il ruolo di un utente
Ho bisogno di ottenere il ruolo associato a un utente -- non "l'utente attualmente loggato".
Sto usando BuddyPress (anche se non dovrebbe influire sulla natura di questa domanda) e mi trovo nel loop bp_members()
.
Come posso recuperare il ruolo dell'utente su cui sto facendo il report nel loop in un determinato momento?
Grazie.

Utilizza l'ID utente e WP_User
:
$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );
Aggiornamento
/**
* Ottieni i ruoli utente tramite ID utente.
*
* @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 sembra darmi ciò che mi aspettavo. Ho ottenuto un editor, un valore vuoto/null e bbp_participant. Mi aspettavo di vedere Admin, Editor, Author o Subscriber poiché sono gli unici ruoli che stiamo utilizzando.

Grazie @toscho ... è un sacco di codice per ottenere un dato che pensavo sarebbe stato più facilmente disponibile.

Se bp_members
restituisce un array di oggetti WP_User
, ciascuno dovrebbe avere la proprietà roles
che contiene un array dei ruoli dell'utente.
In alternativa, puoi usare get_user_meta
per la chiave wp_capabilities
, che restituirà un array di coppie role => capability
:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

$roles finisce per essere un array. Sto cercando di ottenere il ruolo del $user->ID
. Solo un ruolo poiché nessun utente nel nostro sistema ha più di un ruolo assegnato.

Ok, grazie @ChristopherDavis ... $roles[0] restituisce "0" per ogni utente nella lista

Come ho capito, probabilmente è cambiato nel corso degli anni, ora non è più 'wp_capabilities'
. Ho esaminato i file core di WordPress per vedere come lo gestiscono ora e ho trovato una nuova soluzione. Ecco il codice che uso attualmente:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap
viene restituito come un array associativo, ad esempio:
{
"administrator": true
}
oppure
{
"subscriber": true
}
Quindi nel tuo caso probabilmente dovresti ottenere le chiavi dell'array:
$caps_array = array_keys( $cap );
e poi estrarre tutto da lì. Io dovevo verificare se l'utente aveva il ruolo di amministratore, quindi ho controllato:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
Avevo un ID utente, non l'intero oggetto WP_User
, e non volevo usare soluzioni che creassero l'oggetto user
. Come ho verificato, get_user_meta
interroga direttamente il database per verificare questo parametro specifico, quindi questa dovrebbe essere la strada più veloce e con il minor consumo di risorse.
