我尝试将导航拆分为3个单独的导航栏(level 1、level 2和level 3+)。三个,因为它们在站点上是分开的,它们只应根据当前页面显示。
-0-------1--------2-------3+- level/depth
Home
|
|\\___ Lobby
|
|\\___ Projects
| |\\___ Project A
| | |\\___ Review
| | |\\___ Comments
| | \\____ Download
| \\____ Project B
| |\\___ Review
| |\\___ Comments
| \\____ Download
|\\___ Blog
|
\\____ About
|\\___ Legal
\\____ Contact
包含level 1的第一个导航栏始终可见。仅当im当前位于相应的父页面上时,才显示第二个导航栏(级别2)。第三个导航栏也是如此(级别3+,另外,因为此导航栏还将包含级别3的子页面和子页面…)。简而言之:我想在导航栏中显示所有父菜单,只显示当前页面的直接子菜单。
我尝试的内容:
function my_nav_menu( $args = array() )
{
$echo = isset( $args[\'echo\'] ) ? (bool)( $args[\'echo\'] ) : true;
$args[\'echo\'] = false;
add_filter( \'wp_get_nav_menu_items\' , \'my_nav_menu_filter\' , 666 , 3 );
$menu = wp_nav_menu( $args );
remove_filter( \'wp_nav_menu_objects\' , \'my_nav_menu_filter\' , 666 );
if( $echo )
echo $menu;
else
return $menu;
}
function my_nav_menu_filter( $items , $menu , $args )
{
//var_dump( $args );
$navLevel = isset( $args[\'navlevel\'] ) ? (int)( $args[\'navlevel\'] ) : 0;
//echo \'navlevel = \' . $args[\'navlevel\'] . \' | \' . $navLevel;
if( $navLevel == 1 )
{
foreach( $items as $key => $item )
{
if( $item->menu_item_parent != 0 )
unset( $items[$key] );
}
}
else if( $navLevel == 2 )
{
foreach( $items as $key => $item )
{
if( $item->menu_item_parent != 0 )
{
$page = get_page( $item->menu_item_parent );
if( $page->menu_item_parent == 0 )
continue;
}
unset( $items[$key] );
}
}
else if( $navLevel == 3 )
{
foreach( $items as $key => $item )
{
if( $item->menu_item_parent != 0 )
{
$page = get_page( $item->menu_item_parent );
if( $page->menu_item_parent != 0 )
continue;
}
unset( $items[$key] );
}
}
else
{
//var_dump( $items );
}
return $items;
}
在我的标题中调用此。php:<?php my_nav_menu( array( \'echo\' => false , \'navlevel\' => 1 ) ); ?>
然而$args
设置为默认值和我的自定义条目navlevel
过滤器中未显示。
如何按描述拆分导航栏?如何设置自定义$args
-进入