在Wordpress菜单中显示登录用户名


Displaying Logged-In User Name in Wordpress Menu

我使用Wordpress与UserPro,并希望我的菜单显示登录用户的名字,链接到用户配置文件页面。

问题是,在我的菜单结构中,"配置文件"菜单选项应该有一个包含"编辑配置文件","提交"answers"注销"的子菜单。

这是我当前的代码:

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

我可以通过摆弄Firebug中的代码来尝试在菜单下添加子菜单,但这意味着要手动编辑functions.php中的所有链接,这将是乏味的。

我希望能够通过Wordpress菜单轻松地添加,编辑,删除和重定向子菜单项。

请建议。

好吧,我找到了一个解决方案(它可以用于任何主题,任何插件,因为它只使用核心WordPress功能)。

在菜单中,用占位符命名希望显示用户名的菜单项(如:#profile_name#、#user#、#random#等)

现在,将以下代码添加到子主题的functions.php中:

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

如果您使用自己的占位符,请记住将上面代码中的#profile_name#替换为自定义占位符的名称。

抱歉,如果我误用了"占位符"这个词。