it-swarm.com.de

Anzeigen des angemeldeten Benutzernamens im WordPress-Menü

Ich verwende Wordpress mit UserPro und möchte, dass in meinem Menü der Vorname des angemeldeten Benutzers angezeigt wird, der mit der Benutzerprofilseite verknüpft ist.

Das Problem ist, dass in meiner Menüstruktur die Menüoption "Profil" ein Untermenü enthalten soll, das "Profil bearbeiten", "Senden" und "Abmelden" enthält.

Dies ist der Code, den ich derzeit verwende:

/*earlier code, currently commented out, for function to
display username in menu using #profile_name# placeholder

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'] ) ) {
                // Or do_shortcode(), if you must.
                $menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
            }    
        }
    }

    return $menu_items;
}  

end of earlier code */

//currently in use, unlinked code

    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;
    }

Ich kann herumtüfteln und versuchen, das Untermenü unter dem Menü hinzuzufügen, indem ich mit dem Code von Firebug experimentiere, aber das würde manuelle Änderungen an allen Links in der functions.php bedeuten, was mühsam wäre.

Ich möchte in der Lage sein, die Untermenüelemente einfach über das Wordpress-Menü hinzuzufügen, zu bearbeiten, zu entfernen und umzuleiten.

Bitte beraten.

4
Akash kapur

Okay, ich habe eine Lösung gefunden (und sie kann für jedes Thema verwendet werden, mit jedem Plugin, da nur die wichtigsten WordPress-Funktionen verwendet werden).

Benennen Sie im Menü den Menüpunkt, unter dem der Name des Benutzers mit einem Platzhalter angezeigt werden soll (siehe Abbildung unten). Beispiel: # profile_name #, # user #, # random #

 enter image description here 

Fügen Sie nun den folgenden Code in die functions.php Ihres Child-Themes ein:

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'] ) ) {
                // Or do_shortcode(), if you must.
                $menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
            }    
        }
    }

    return $menu_items;
} 

Wenn Sie einen eigenen Platzhalter verwenden, müssen Sie im obigen Code # profile_name # durch den Namen Ihres benutzerdefinierten Platzhalters ersetzen.

Entschuldigung für den Fall, dass ich den Begriff "Platzhalter" missbraucht habe.

7
Akash kapur

Der Code:

function give_profile_name($atts){
...
}

gibt eine Warnung. Besser ist:

function give_profile_name(){
...
}

Und es ist besser zu erkennen, ob der Benutzer angemeldet ist oder nicht. Wie so:

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

Hoffe das hilft.

5
Eutychus Mak

Kein Shortcode erforderlich

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;
} 
0
Manu Lebranders