Cum obții Numele Rolului pentru utilizatorul curent? (WordPress)
În prezent am acest fragment de cod:
$user = new WP_User(get_current_user_id());
echo $user->roles[1];
iar rezultatul este slug-ul rolului din forumul bbPress. (roles[0] ar fi rolul general WordPress dar nu am nevoie de acesta.)
Ceea ce am nevoie este numele rolului, nu slug-ul. Astfel, rezultatul așteptat ar trebui să fie ceva de genul "Keymaster", "Participant", "Spectator" etc.
Deci, cum obțin Numele Rolului pentru utilizatorul curent?

Nu sunt sigur dacă bbPress urmează convențiile WordPress, dar WP are o clasă globală numită $WP-roles
care conține informațiile despre roluri. Deci, pornind de la ceea ce ai, există rolul utilizatorului curent:
$current_role = $user->roles[1];
Apoi, preia o listă cu toate rolurile:
$all_roles = $wp_roles->roles;
În continuare, parcurge $all_roles
și găsește $current_role"
:
foreach ($all_roles as $role_key => $role_details) {
if ($role_key == $current_role) $current_role_name = $role_details['name'];
}
Acum, $current_role_name
ar trebui să conțină numele afișat pe care îl cauți (totuși, nu am verificat acest cod).

Rezultatul este un avertisment care spune: Invalid argument supplied for foreach()

Nu folosesc bbPress, așa că nu știu dacă modifică structura rolurilor. Dacă folosești var_dump
pe $all_roles
ar trebui să poți vedea structura sa și să adaptezi bucla foreach
cu argumentele corecte.

mulțumesc pentru acest fragment de cod! Am o instalație Buddypress (și o temă personalizată) unde este posibil să adaug mai multe roluri unui singur utilizator. Am ajustat puțin codul tău pentru a funcționa:
<?php
//Obține numele rolului după ID-ul utilizatorului
if( !function_exists('get_user_role_name') ){
function get_user_role_name($user_ID){
global $wp_roles;
$user_data = get_userdata($user_ID);
$user_role_slug = $user_data->roles;
foreach($user_role_slug as $user_role){
//numara rolurile utilizatorului
$user_role_nr++;
//adaugă separator de virgulă dacă există mai mult de un rol
if($user_role_nr > 1) { $user_role_list .= ", "; }
//adaugă numele rolului
$user_role_list .= translate_user_role($wp_roles->roles[$user_role]['name']);
}
//returnează lista de roluri a utilizatorului
return $user_role_list;
}
}
?>

Poate că această problemă a fost deja rezolvată. Dar, tocmai am scris acest cod și am decis să îl împărtășesc.
<?php
//Obține numele rolului după ID-ul utilizatorului
if( !function_exists('get_user_role_name') ){
function get_user_role_name($user_ID){
global $wp_roles;
$user_data = get_userdata($user_ID);
$user_role_slug = $user_data->roles[0];
return translate_user_role($wp_roles->roles[$user_role_slug]['name']);
}
}
?>
<?php echo get_user_role_name(ID utilizator aici);?>

Puteți obține numele rolului utilizatorului curent (numele tradus, nu slug-ul) folosind următoarea funcție, trebuie doar să transmiteți slug-ul rolului utilizatorului curent ca parametru:
function wp_get_current_user_translatable_role_name( $current_user_role_slug = '' ) {
$role_name = '';
if ( ! function_exists( 'get_editable_roles' ) ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
}
// Rețineți că translate_user_role nu funcționează în prezent în front-end.
load_textdomain( 'default', WP_LANG_DIR . '/admin-' . get_locale() . '.mo' );
$editable_roles = array_reverse( get_editable_roles() );
foreach ( $editable_roles as $role => $details ) {
$name = translate_user_role( $details['name'] );
// pre-selectare rol specificat
if ( $current_user_role_slug == $role ) {
$role_name = $name;
}
}
echo $role_name ;
}
Acum, obțineți slug-ul rolului utilizatorului curent cu următorul cod:
$user_meta = get_userdata(get_current_user_id());
$current_user_role_slug = $user_meta->roles[0];
Utilizați funcția wp_get_current_user_translatable_role_name( $current_user_role_slug );
pentru a obține numele rolului utilizatorului curent (numele tradus, nu slug-ul).
NOTĂ: Utilizatorul trebuie să fie autentificat pentru a vedea numele rolului.

@nmr poți afișa numele variabilei astfel: <?php echo ucfirst($role_name); ?>
acesta ar trebui să afișeze "Keymaster", "Participant", "Spectator", "administrator" etc.

Dar tot un slug
este. Ce se întâmplă dacă rolul va fi de genul slug='spectator_vip' name= 'VIP Spectator'
sau slug= 'shop_manager' name= 'Shop Manager'
. Dacă un utilizator are rolul "editor" (slug-ul rolului built-in), în lista de utilizatori, în funcție de limba activă, poți vedea "Editor", "Redactor", "редактор". Nu poți presupune că numele este egal cu slug-ul.

Iată modalitatea de a obține acest lucru
function get_user_role($user_id) {
global $wp_roles;
$roles = array();
$user = new WP_User( $user_id );
if ( !empty( $user->roles ) && is_array( $user->roles ) ) {
foreach ( $user->roles as $role )
$roles[] .= translate_user_role( $role );
}
return implode(', ',$roles);
}
//apoi apelează funcția cu parametrul userid
echo get_user_role( 7 );
