web-dev-qa-db-fra.com

Affichage du nom d'utilisateur connecté dans le menu Wordpress

J'utilise Wordpress avec UserPro et je souhaite que mon menu affiche le prénom de l'utilisateur connecté, lié à la page de profil de l'utilisateur.

Le problème est que dans ma structure de menu, l'option de menu "Profil" est supposée avoir un sous-menu contenant "modifier le profil", "soumettre" et "se déconnecter".

C'est le code que j'utilise actuellement:

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

Je peux me débrouiller et essayer d'ajouter le sous-menu sous le menu en jouant avec le code de Firebug, mais cela impliquerait des modifications manuelles de tous les liens dans le functions.php, ce qui serait fastidieux.

Je veux pouvoir ajouter, modifier, supprimer et rediriger facilement les éléments de sous-menu via le menu Wordpress.

S'il vous plaît donnez votre avis.

4
Akash kapur

D'accord, j'ai trouvé une solution (et elle peut être utilisée pour n'importe quel thème, avec n'importe quel plugin, car elle utilise uniquement les fonctions principales de WordPress).

Dans le menu, nommez l'élément de menu où vous souhaitez que le nom de l'utilisateur apparaisse avec un espace réservé (voir la capture d'écran ci-dessous). Exemple: # nom_profil #, # utilisateur #, # aléatoire #

 enter image description here 

Maintenant, ajoutez le code suivant au functions.php de votre thème enfant:

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

Si vous utilisez votre propre espace réservé, n'oubliez pas de remplacer # nom_profil # par le nom de votre espace réservé dans le code ci-dessus.

Toutes mes excuses au cas où j'aurais mal utilisé le terme "lieu-titulaire".

7
Akash kapur

Le code:

function give_profile_name($atts){
...
}

donne un avertissement. Mieux vaut:

function give_profile_name(){
...
}

Et il est préférable de détecter si l'utilisateur est connecté ou non. Ainsi:

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

J'espère que cela t'aides.

5
Eutychus Mak

Aucun shortcode nécessaire

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