根据用户登录/注销状态将菜单插入主题位置

时间:2016-02-21 作者:maGz

我正在使用Avada Theme 从前面的菜单中,我在“外观”菜单下设置了2个菜单:

  • menu-logged-in 其中包含一个父项(我的帐户),然后是几个子项;和menu-logged-out 其中包含指向/my-account 用户可以登录或注册的页面
我的意图是根据用户是登录还是匿名,动态显示主题位置中名为“顶部导航”的相关菜单。

我已将此代码添加到我的子主题中function.php:

add_filter( \'wp_nav_menu_items\', \'add_loginout_link\', 10, 2 );
function add_loginout_link( $items, $args ) {
    if (is_user_logged_in() && $args->theme_location == \'top_navigation\') {
        $items .= \'<li><a href="\'. wp_logout_url() .\'">Log Out</a></li>\';
        //$items .= wp_nav_menu( array(\'menu\' => \'menu-logged-in\', \'container\' => \'\') );
    }
    elseif (!is_user_logged_in() && $args->theme_location == \'top_navigation\') {
        $items .= \'<li><a href="\'. site_url(\'wp-login.php\') .\'">Log In</a></li>\';
    }
    return $items;
}
现在这确实可行,但我更希望能够在位置中调用Wordpress菜单,而不是将其硬编码到函数中。在上面的区块中,我已经发表了评论line 5 这有助于我实现这一点,但它会呈现一个预格式化的HTML<;UL>;在页面的最顶端,而不是我想要的地方。

enter image description here

如果有人能为我指出正确的方向,我将不胜感激。非常感谢。

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

好吧,算了吧!我对我的主题函数进行了如下修改:

add_filter( \'wp_nav_menu_items\', \'add_loginout_link\', 10, 2 );
function add_loginout_link( $items, $args ) {
    if (is_user_logged_in() && $args->theme_location == \'top_navigation\') {
        $items .= wp_nav_menu( array(\'menu\' => \'menu-logged-in\', \'container\' => \'\', \'echo\' => false, \'items_wrap\' => \'%3$s\') );
    }
    elseif (!is_user_logged_in() && $args->theme_location == \'top_navigation\') {
        $items .= wp_nav_menu( array(\'menu\' => \'menu-logged-out\', \'container\' => \'\', \'echo\' => false, \'items_wrap\' => \'%3$s\') );
    }
    return $items;
}
所以现在,给我<li> 我需要的项目并呈现在正确的位置。希望这对别人有帮助。

相关推荐

Use Post ID in functions.php

我的functions.php. 它工作得很好:当预订时,它会给我发电子邮件。易于理解的然而,我希望它能给我发送该预订的post ID,而不仅仅是“你好,世界!”消息帮助function add_to_system() { // get post meta // $email = get_post_meta(\'\',$post_id) // $post_id = get_queried_object_id(); mail(\'michael.mc