Afișarea Numelui Utilizatorului Conectat în Meniul WordPress

3 aug. 2015, 13:03:22
Vizualizări: 28.5K
Voturi: 6

Folosesc WordPress cu UserPro și vreau ca meniul meu să afișeze prenumele utilizatorului conectat, cu link către pagina profilului utilizatorului.

Problema este că în structura meniului meu, opțiunea de meniu "Profil" ar trebui să aibă un submeniu care să conțină "editare profil", "trimite" și "deconectare".

Acesta este codul pe care îl folosesc în prezent:

/*cod anterior, momentan comentat, pentru funcția de
afișare a numelui de utilizator în meniu folosind placeholder-ul #profile_name#

function give_profile_name($atts){
echo userpro_profile_data('first_name', get_current_user_id());
}

add_shortcode('profile_name', 'give_profile_name');

add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );
function my_dynamic_menu_items( $menu_items ) {
    foreach ( $menu_items as $menu_item ) {
        if ( '#profile_name#' == $menu_item->title ) {
            global $shortcode_tags;
            if ( isset( $shortcode_tags['profile_name'] ) ) {
                // Sau do_shortcode(), dacă este necesar.
                $menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
            }    
        }
    }

    return $menu_items;
}  

sfârșitul codului anterior */

//în prezent în folosință, cod nelinkat

    add_filter( 'wp_nav_menu_items', 'my_custom_menu_item');
    function my_custom_menu_item($items)
    {
        if(is_user_logged_in())
        {
            $user=wp_get_current_user();
            $name=$user->user_firstname;
            $items .= '<li>'.$name.'';
        }
        return $items;
    }

Pot să mă joc și să încerc să adaug submeniul sub meniu modificând codul din Firebug, dar asta ar însemna editări manuale ale tuturor link-urilor din functions.php, ceea ce ar fi obositor.

Vreau să pot adăuga, edita, elimina și redirecționa elementele submeniului cu ușurință prin intermediul meniului WordPress.

Vă rog să mă sfătuiți.

0
Toate răspunsurile la întrebare 3
0
10

Bine, am găsit o soluție (și poate fi folosită pentru orice temă, cu orice plugin, deoarece utilizează doar funcții de bază din WordPress).

În meniu, denumiți elementul de meniu unde doriți ca numele utilizatorului să apară cu un substituent (vezi captura de ecran de mai jos). Exemplu: #profile_name#, #user#, #random#

Meniu WordPress cu substituent #profile_name#

Acum, adăugați următorul cod în fișierul functions.php al temei child:

function give_profile_name($atts){
    $user=wp_get_current_user();
    $name=$user->user_firstname; 
    return $name;
}

add_shortcode('profile_name', 'give_profile_name');

add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );
function my_dynamic_menu_items( $menu_items ) {
    foreach ( $menu_items as $menu_item ) {
        if ( '#profile_name#' == $menu_item->title ) {
            global $shortcode_tags;
            if ( isset( $shortcode_tags['profile_name'] ) ) {
                // Sau do_shortcode(), dacă este necesar.
                $menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
            }    
        }
    }

    return $menu_items;
} 

În cazul în care folosiți propriul substituent, nu uitați să înlocuiți #profile_name# cu numele substituentului personalizat în codul de mai sus.

Îmi cer scuze dacă am folosit termenul 'substituent' incorect.

3 aug. 2015 14:57:07
0

Codul:

function give_profile_name($atts){
...
}

generează o avertizare. Este mai bine:

function give_profile_name(){
...
}

Și este mai bine să verifici dacă utilizatorul este autentificat sau nu. Astfel:

function give_profile_name(){
    $user=wp_get_current_user();
    if(!is_user_logged_in())
        $name = "Utilizator neautentificat";
    else
         $name=$user->user_firstname.' '.$user->user_lastname; 
    return $name;
}

Sper că acest lucru vă ajută.

27 oct. 2016 10:42:47
0

Nu este nevoie de shortcode

add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );
function my_dynamic_menu_items( $menu_items ) {
    foreach ( $menu_items as $menu_item ) {
        if ( strpos($menu_item->title, '#profile_name#') !== false) {
                $menu_item->title =  str_replace("#profile_name#",  wp_get_current_user()->user_firstname, $menu_item->title);
        }
    }

    return $menu_items;
} 
24 ian. 2018 14:51:08