如何仅在标题菜单中添加自定义菜单项,如用户名

时间:2013-09-19 作者:Nikhil Joshi

我是wordpress新手我正在建立wordpress网站,该网站有3个菜单

我的问题是,只有当用户登录时,我才需要将用户名添加到我的顶部菜单

但使用下面的代码片段,它会在所有菜单中添加自定义菜单项,即我在google搜索上述查询的解决方案时发现的下面的代码

function my_custom_menu_item($items)
{
    if(is_user_logged_in())
    {
        $user=wp_get_current_user();
        $name=$user->display_name; // or user_login , user_firstname, user_lastname
        $items .= \'<li><a href="">Welcome \'.$name.\'</a></li>\';
    }
   return $items;
}
add_filter( \'wp_nav_menu_items\', \'my_custom_menu_item\');
这是我的顶级菜单结构

if User is not logged in

<我的帐户登录注册密码丢失

if User is Logged In

<欢迎Nikhil个人资料更改密码注销博客

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

wp_nav_menu_items 过滤器将菜单参数作为第二个参数传递。

因此,如果将代码修改为:

add_filter( \'wp_nav_menu_items\', \'my_custom_menu_item\', 10, 2);

function my_custom_menu_item($items, $args) ...
您将能够检查数据$args 与特定菜单匹配的内部功能。然而,检查什么的细节取决于菜单设置的精确程度。可能是$args[\'menu\'] 保留名称,可能是$args[\'theme_location\'], 等

另一种选择是,只需在调用所需菜单之前添加回调,然后在主题模板中删除回调:

add_filter( \'wp_nav_menu_items\', \'my_custom_menu_item\');

// target wp_nav_menu() call in between

remove_filter( \'wp_nav_menu_items\', \'my_custom_menu_item\');

SO网友:Tomás Ramírez

@Rarst是对的,您只需要第二个参数来为特定菜单执行此操作,在您的示例中如下所示:

function my_custom_menu_item($items, $args)
{
    if(is_user_logged_in() && $args->theme_location == \'primary\')
    {
        $user=wp_get_current_user();
        $name=$user->display_name; // or user_login , user_firstname, user_lastname
        $items .= \'<li><a href="">Welcome \'.$name.\'</a></li>\';
        $items.= //Change Password, Logout, etc
    }
    elseif (!is_user_logged_in() && $args->theme_location == \'primary\') {
        $items .= \'<li><a href="\'. site_url(\'wp-login.php\') .\'">Log In</a></li>\';
        $items.= //Sign up, Lost Password
    }
    return $items;
}
add_filter( \'wp_nav_menu_items\', \'my_custom_menu_item\');

结束

相关推荐

Primary and secondary menus

我试图使主菜单上的每个选项卡都链接到次菜单,这样实际上,每个主选项卡都会指向次菜单中的一组选项卡,而不是保持静态。我希望你能帮助我,我不是一个高级WP用户,所以可以使用简单的术语。更新我已经添加了代码,但它已经显示在我的网页和仪表板上,所以我一定是弄错了,所以我将其粘贴在下面,以便您可以看到。我不知道如何找到主弹头,但我想这是我在主弹头上添加的内容。function km_dynamic_secondary_menu_reg() { global $km_nav_menus;