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.

3 Answers
3

Ideally, you should be passing the “theme_location” argument to wp_nav_menu().

Register your three menus in functions.php:

register_nav_menus( array(
     'front_page' => 'Front Page Menu',
     'single' => 'Single Post Menu',
     'default' => 'Default Menu'
) );

Then, replace your code above with:

if ( is_front_page() )  
{
     wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'front_page' ));
} 
elseif ( is_single() )  
{
     wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'single' ) );
} 
else 
{
     wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'default' ));
} 

Then, ensure the appropriate custom menu is defined for each Theme Location, via Dashboard -> Appearance -> Menus

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *