Come ottenere il Nome del Ruolo dell'utente corrente? (WordPress)
Al momento ho questo snippet:
$user = new WP_User(get_current_user_id());
echo $user->roles[1];
e l'output è lo slug del ruolo del forum bbPress. (roles[0] sarebbe il ruolo generale di WP ma non mi serve.)
Quello di cui ho bisogno è il nome del ruolo, non lo slug. Quindi, l'output previsto dovrebbe essere qualcosa come "Keymaster", "Participant", "Spectator" ecc.
Quindi, come posso ottenere il Nome del Ruolo dell'utente corrente?

Non sono sicuro se bbPress segua le convenzioni di WordPress, ma WP ha una classe globale chiamata $WP-roles
che contiene le informazioni sui ruoli. Quindi, partendo da quello che hai, c'è il ruolo dell'utente corrente:
$current_role = $user->roles[1];
Successivamente, recupera un elenco di tutti i ruoli:
$all_roles = $wp_roles->roles;
Poi, scorri $all_roles
e trova il $current_role"
:
foreach ($all_roles as $role_key => $role_details) {
if ($role_key == $current_role) $current_role_name = $role_details['name'];
}
Ora, $current_role_name
dovrebbe contenere il nome visualizzato che stai cercando (non ho verificato questo codice, però).

Il risultato è un avviso che dice: Invalid argument supplied for foreach()

Non uso bbPress, quindi non so se modifica la struttura dei ruoli. Se usi var_dump
su $all_roles
dovresti poter vedere la sua struttura e adattare il ciclo foreach
con gli argomenti corretti.

grazie per questo snippet di codice! Sto gestendo un'installazione di Buddypress (e un tema personalizzato) dove è possibile aggiungere più ruoli a un utente. Ho modificato leggermente il tuo codice per farlo funzionare:
<?php
//Ottieni il nome del ruolo tramite ID utente
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){
//conta il numero di ruoli utente
$user_role_nr++;
//aggiungi una virgola come separatore se c'è più di un ruolo
if($user_role_nr > 1) { $user_role_list .= ", "; }
//aggiungi il nome del ruolo
$user_role_list .= translate_user_role($wp_roles->roles[$user_role]['name']);
}
//restituisci la lista dei ruoli utente
return $user_role_list;
}
}
?>

Forse hanno già risolto questo problema. Ma, ora ho appena scritto questo e ho deciso di condividerlo.
<?php
//Ottieni il nome del ruolo tramite ID utente
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 utente qui);?>

Puoi ottenere il nome del ruolo dell'utente corrente (nome tradotto ma non lo slug) utilizzando la seguente funzione, devi solo passare lo slug del ruolo dell'utente corrente come parametro:
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';
}
// Nota che translate_user_role attualmente non funziona nel 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'] );
// preseleziona il ruolo specificato
if ( $current_user_role_slug == $role ) {
$role_name = $name;
}
}
echo $role_name ;
}
Ora, ottieni lo slug del ruolo dell'utente corrente con il seguente codice:
$user_meta = get_userdata(get_current_user_id());
$current_user_role_slug = $user_meta->roles[0];
Utilizza la funzione wp_get_current_user_translatable_role_name( $current_user_role_slug );
per ottenere il nome del ruolo dell'utente corrente (nome tradotto ma non lo slug).
NOTA: L'utente deve essere loggato per visualizzare il nome del ruolo.

@nmr puoi semplicemente visualizzare il nome della variabile così: <?php echo ucfirst($role_name); ?>
questo dovrebbe mostrare ad esempio "Keymaster", "Participant", "Spectator", "administrator" ecc.

Ma rimane comunque uno slug
. Cosa succede se il ruolo sarà tipo slug='spectator_vip' name= 'VIP Spectator'
oppure slug= 'shop_manager' name= 'Shop Manager'
. Se un utente ha un ruolo "editor" (slug del ruolo predefinito), nella lista utenti, a seconda della lingua attiva, potresti vedere "Editor", "Redattore", "редактор". Non puoi dare per scontato che il nome sia uguale allo slug.

Ecco il modo per ottenerlo
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);
}
//poi chiama la funzione con il parametro userid
echo get_user_role( 7 );
