Hide Menu Unless Logged In

时间:2020-04-11 作者:Peter

我创建了一个菜单,叫做“主菜单”,只想向登录的用户显示它。我只能找到允许我显示/隐藏单个菜单项的插件,但不能找到整个菜单。我该怎么做?

1 个回复
SO网友:Tony Djukic

假设您能够在调用菜单的文件(可能是header.php)中编辑主题或子主题,请使用以下内容:

<?php
    if( is_user_logged_in() ) :
        wp_nav_menu( array(
            \'theme_location\' => \'header-nav\',
            \'menu_id\'        => \'header-menu\',
        ) );
    endif;
?>
这将是首选选项,因为它根本不会加载导航,所以即使是足够精明的人查看源代码/开发人员控制台也不会看到它。

如果您无法编辑主题/子主题文件,则可以使用CSS进行编辑:

#site-navigation {
    display:none;
}
body.logged-in #site-navigation{
    display:block;
}
注意,上面的CSS解决了<nav> 标记对于我最近开始构建的站点,您必须查看源代码/开发人员控制台,并确定要添加的元素/容器display:none; 到重要的是WordPress添加了.logged-in 类设置为body标记,特别是允许我们根据登录的用户编写不同的CSS/js规则/函数。

但是,正如我所说,如果您所追求的是阻止未登录的用户使用菜单查找项目,那么CSS不是首选选项-为此,您希望在顶部使用条件检查。

Addendum我还应该添加您可以添加的else 并加载其他菜单或登录链接。。。

<?php
    if( is_user_logged_in() ) :
        wp_nav_menu( array(
            \'theme_location\' => \'header-nav\',
            \'menu_id\'        => \'header-menu\',
        ) );
    else :
        wp_nav_menu( array(
            \'theme_location\' => \'header-nav-notloggedin\',
            \'menu_id\'        => \'header-menu-notloggedin\',
        ) );
    endif;
?>