The navigation menu feature, introduced in WordPress 3.0, allows for the intuitive creation and maintaining of navigation menus in themes.At the very least, a standard theme will need a main navigation menu, perhaps in the header and a secondary navigation menu in the footer. To do this, we will register those two menus “Main Menu” and “Secondary Menu”While this isn’t a particularly new feature, its still nice to wrap it in an if function_exists()
just in case the user is stuck in a pre 3.0 installation:In the functions.php
file, include the following:
if ( function_exists( 'register_nav_menus' ) ) {
register_nav_menus(
array(
'main_menu' => __( 'Main Menu', 'cake' ),
'secondary_menu' => __( 'Secondary Menu', 'cake' ),
)
);
}
Now that the Menus are registered, we need to tell the theme where to output them. We’d like the Main Menu to appear in our header. So, in our header.php
file, we include the following code:
<?php if ( has_nav_menu( 'main_menu' ) ) { ?>
<?php $defaults = array(
'theme_location' => 'main_menu',
'menu' => '',
'container' => false,
'echo' => true,
'fallback_cb' => false,
'items_wrap' => '<ul id="%1$s"> %3$s</ul>',
'depth' => 0 );
wp_nav_menu( $defaults );
?>
<?php } else { ?>
<ul>
<?php wp_list_pages('title_li='); ?>
</ul>
<?php } ?>
First, we check to see if we have a menu called ‘main_menu’ defined and if we do, we insert its contents here, otherwise we fallback to the default wp_list_pages()
which we can further customize to display the links as we need.If you’d like even further customization of the menu, see the WordPress codex page on wp_nav_menu()
function.We want the secondary menu to appear in the footer, so we open up the footer.php
and include the following code:
<?php if ( has_nav_menu( 'secondary_menu' ) ) { ?>
<?php $defaults = array(
'theme_location' => 'secondary_menu',
'menu' => '',
'container' => false,
'echo' => true,
'fallback_cb' => false,
'items_wrap' => '<ul id="%1$s"> %3$s</ul>',
'depth' => 0 );
wp_nav_menu( $defaults );
?>
<?php } else { ?>
<ul>
<?php wp_list_pages('title_li='); ?>
</ul>
<?php } ?>