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()
booster
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.
cjbj
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.
Razon Komar Pal
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.
nmr
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 );