Cum obții Numele Rolului pentru utilizatorul curent? (WordPress)

19 sept. 2016, 14:58:05
Vizualizări: 22K
Voturi: 2

Î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?

1
Comentarii

Funcția wp_get_current_user() ar trebui să te ajute. Vei primi toate datele utilizatorului prin clasa ´WP_User`.

bueltge bueltge
19 sept. 2016 15:31:51
Toate răspunsurile la întrebare 5
2

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).

19 sept. 2016 15:30:42
Comentarii

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

booster booster
21 sept. 2016 01:01:23

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 cjbj
21 sept. 2016 10:17:11
0

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;

    }
}
?>
10 iun. 2020 13:05:25
0

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);?>
12 ian. 2020 01:40:06
4

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.

25 apr. 2019 09:13:44
Comentarii

Citat: "Ceea ce am nevoie este numele rolului, nu slug-ul."

nmr nmr
25 apr. 2019 10:07:51

@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 Razon Komar Pal
28 apr. 2019 07:56:44

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 nmr
28 apr. 2019 08:33:15

@nmr vezi codul meu modificat, am înțeles greșit esența întrebării dar acum am înțeles punctul și l-am rezolvat.

Razon Komar Pal Razon Komar Pal
28 apr. 2019 10:48:57
1

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 );
25 apr. 2019 10:40:18
Comentarii

Codul în forma sa actuală încearcă să traducă slug, ceea ce reprezintă o soluție nepotrivită. Ar trebui să transmiți numele rolului către funcția translate_user_role().

nmr nmr
25 apr. 2019 11:33:08