J'essaie de diviser ma navigation en 3 barres de navigation uniques (niveau 1, niveau 2 et niveau3 +). Trois car ils sont séparés sur le site et ils ne devraient apparaître qu'en fonction de la page en cours.
-0-------1--------2-------3+- level/depth
Home
|
|\___ Lobby
|
|\___ Projects
| |\___ Project A
| | |\___ Review
| | |\___ Comments
| | \____ Download
| \____ Project B
| |\___ Review
| |\___ Comments
| \____ Download
|\___ Blog
|
\____ About
|\___ Legal
\____ Contact
La première barre de navigation contenant le niveau 1 est toujours visible. La deuxième barre de navigation (niveau 2) uniquement lorsque je suis actuellement sur la page parent correspondante. Il en va de même pour la troisième barre de navigation (niveau 3+, plus car cette barre de navigation contiendra également des sous-pages et des sous-pages ... de niveau 3).
En bref: je veux afficher tous les menus parents dans leurs barres de navigation et uniquement les enfants directs de la page en cours.
Ce que j'ai essayé:
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;
}
Appelant cela dans mon header.php:
<?php my_nav_menu( array( 'echo' => false , 'navlevel' => 1 ) ); ?>
Cependant, il $args
est défini sur les valeurs par défaut et mon entrée personnalisée navlevel
n'est pas affichée dans le filtre.
Comment puis-je diviser ma barre de navigation comme décrit? Comment définir mon $args
entrée personnalisée ?