我正在使用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>;在页面的最顶端,而不是我想要的地方。
如果有人能为我指出正确的方向,我将不胜感激。非常感谢。
最合适的回答,由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> 我需要的项目并呈现在正确的位置。希望这对别人有帮助。