I created some menus, and now I’m trying to set up a conditional construction with wp_nav_menu in header.php, but the behavior is not really as expected. I’m doing something like
<?php
if ( is_front_page() )
{
wp_nav_menu( array( 'container_class' => 'menu-header', 'menu' => '68' ));
}
elseif ( is_single() )
{
wp_nav_menu( array( 'container_class' => 'menu-header', 'menu' => '69' ) );
}
else
{
wp_nav_menu( array( 'container_class' => 'menu-header', 'menu' => '33' ));
}
?>
the last “else” catches 404s and pages, but with archives (categories, tags, search, author, …) the menu falls back to the default fallback (wp_list_pages) instead of menu 33. Any ideas why this is happening? Note: I’m modifying the TwentyTen theme.
Ideally, you should be passing the “theme_location” argument to wp_nav_menu().
Register your three menus in functions.php:
Then, replace your code above with:
Then, ensure the appropriate custom menu is defined for each Theme Location, via Dashboard -> Appearance -> Menus
If you’re using the
menu
parameter, you can also use thename
or theslug
. Please try those too. If you’re sure about the ID, then you could also try usingmenu_id
instead.I discovered the problem was somehow caused by a pre_get_posts filter in my functions.php. In fact, I had an issue with this filter before, so I should’ve known 😉 Cheers!