Cum obții rolul unui utilizator
Am nevoie să obțin rolul asociat unui utilizator -- nu cel al "utilizatorului conectat în prezent".
Folosesc BuddyPress (deși acest lucru nu ar trebui să afecteze natura acestei întrebări) și mă aflu în bucla bp_members()
.
Cum pot obține rolul utilizatorului despre care raportez în buclă la un moment dat?
Mulțumesc.

Folosește ID-ul utilizatorului și WP_User
:
$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );
Actualizare
/**
* Obține rolurile utilizatorului după 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;
}
Exemplu de utilizare:
print '<pre>'
. htmlspecialchars(
print_r( wpse_58916_user_roles_by_id(1), TRUE )
)
. '</pre>';
Array
(
[administrator] => Administrator
)

Mulțumesc @toscho -- nu mi-a dat ceea ce mă așteptam. Am primit un editor, o valoare goală/nulă și bbp_participant. Mă așteptam să văd Admin, Editor, Autor sau Abonat, deoarece acestea sunt singurele roluri pe care le folosim.

Mulțumesc @toscho ... este mult cod pentru a obține o valoare pe care m-aș fi așteptat să fie mai ușor de accesat.

Dacă bp_members
returnează un array de obiecte WP_User
, fiecare ar trebui să aibă proprietatea roles
care conține un array cu rolurile utilizatorilor.
Altfel, poți utiliza get_user_meta
pentru cheia wp_capabilities
, care va returna un array de perechi role => capability
:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

$roles este un array. Încerc să obțin rolul $user->ID
. Doar un singur rol, deoarece niciun utilizator din sistemul nostru nu are mai mult de un rol atribuit.

Ok, mulțumesc @ChristopherDavis ... $roles[0] returnează "0" pentru toți utilizatorii din listă

După cum am înțeles, probabil s-a schimbat de-a lungul anilor, acum nu mai este 'wp_capabilities'
. Am analizat fișierele de bază ale WP pentru a vedea cum se face acum și am găsit o nouă soluție. Iată codul pe care îl folosesc acum:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap
vine apoi ca un array asociativ, de exemplu:
{
"administrator": true
}
sau
{
"subscriber": true
}
Deci, în cazul tău, probabil ar trebui să obții cheile array-ului:
$caps_array = array_keys( $cap );
și apoi să obții totul din el. Eu aveam nevoie să verific dacă utilizatorul are rolul de administrator, așa că am făcut:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
Aveam un ID de utilizator, nu întregul obiect WP_User
și nu voiam să folosesc nicio soluție care ar crea obiectul user
. După cum am verificat, get_user_meta
merge direct în baza de date pentru a verifica acest parametru exact, deci aceasta ar trebui să fie cea mai rapidă și eficientă cale din punct de vedere al resurselor.
