내 탐색을 3 개의 단일 탐색 모음 (레벨 1, 레벨 2 및 레벨 3+)으로 분할하려고합니다. 3 개는 사이트에서 분리되어 현재 페이지에만 표시되어야하기 때문에 3 개입니다.
-0-------1--------2-------3+- level/depth
Home
|
|\___ Lobby
|
|\___ Projects
| |\___ Project A
| | |\___ Review
| | |\___ Comments
| | \____ Download
| \____ Project B
| |\___ Review
| |\___ Comments
| \____ Download
|\___ Blog
|
\____ About
|\___ Legal
\____ Contact
레벨 1을 포함하는 첫 번째 탐색 모음은 항상 표시됩니다. 현재 해당 상위 페이지에있는 경우에만 두 번째 탐색 모음 (레벨 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;
}
내 header.php에서 이것을 호출 :
<?php my_nav_menu( array( 'echo' => false , 'navlevel' => 1 ) ); ?>
그러나 $args
기본값과 사용자 정의 항목으로 설정되어 있습니다navlevel
이 필터에 표시되지 않습니다.
설명에 따라 내비 바를 어떻게 분할 할 수 있습니까? 사용자 정의 $args
항목 은 어떻게 설정 합니까?