I think I got the answer:
function my_nav_menu( $args = array() )
{
$echo = isset( $args['echo'] ) ? (bool)( $args['echo'] ) : true;
$args['echo'] = false;
add_filter( 'wp_nav_menu_objects' , 'my_filter_nav_menu' , 100 , 2 );
$menu = wp_nav_menu( $args );
remove_filter( 'wp_nav_menu_objects' , 'my_filter_nav_menu' , 100, 2 );
if( $echo )
echo $menu;
else
return $menu;
}
This does the trick: lets me alter the menuitems and custom args are still available.
I accidentally hooked the filter into wp_get_nav_menu_items
instead of wp_nav_menu_objects
.
I still having problems with the filtering, however these are probably some logical bugs..
EDIT: i’ll solved my problem by combining navbar level 2 and navbar level 3+ into one and separating them with css
heres the current php part:
function serthy_filter_nav_menu( $items , $args )
{
$argArray = (array)( $args );
if( isset( $argArray['toplevel'] ) )
{
foreach( $items as $key => $item )
{
if( $item->menu_item_parent != 0 )
unset( $items[$key] );
}
return $items;
}
global $post;
$arr = array();
foreach( $items as $key => $item )
{
$parentIDs = get_post_ancestors( $item->ID );
foreach( $parentIDs as $i => $parentID )
{
if( $parentID == $post->ID )
{
array_push( $arr , $item );
break;
}
}
}
return $arr;
}