Custom Menus in WordPress 3 are great. They allow for easy drag and drop to create custom menu structures. Custom menus can be found by going to Appearance > Menus
The current default template, Twenty Ten, only uses one custom menu. Here we’re going to do two things – Firstly we’re going to extend the number of menu’s you can use and secondly we’re going to create some shortcode so we can drop our menu’s right into a post, page or sidebar widget.
Open up the functions.php file in your editor and go to the register_nav_menus array around line 99
register_nav_menus( array(
'primary' => __( 'Primary Navigation', 'twentyten' ),
) );
Now add additional menus into the array
register_nav_menus( array(
'primary' => __( 'Primary Navigation', 'twentyten' ),
'menu-one' => __( 'Menu One', 'twentyten' ),
'menu-two' => __( 'Menu Two', 'twentyten' ),
'menu-three' => __( 'Menu Three', 'twentyten' ),
) );
That’s it – We now have our additional menu’s
The next stage is to call on these new menu’s. Traditionally that means embedding code within our template like so –
<?php wp_nav_menu( array( 'theme_location' => 'menu-one' )); ?>
Instead we’re going to further add to our functions.php file and convert this into shortcode that can be used anywhere in WordPress and I found a great example of how to do this here – http://www.cozmoslabs.com/2010/06/28/wp_nav_menu-shortcode/
// Function that will return our WordPress menu
function list_menu($atts, $content = null) {
extract(shortcode_atts(array(
'menu' => '',
'container' => 'div',
'container_class' => '',
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'depth' => 0,
'walker' => '',
'theme_location' => ''),
$atts));
return wp_nav_menu( array(
'menu' => $menu,
'container' => $container,
'container_class' => $container_class,
'container_id' => $container_id,
'menu_class' => $menu_class,
'menu_id' => $menu_id,
'echo' => false,
'fallback_cb' => $fallback_cb,
'before' => $before,
'after' => $after,
'link_before' => $link_before,
'link_after' => $link_after,
'depth' => $depth,
'walker' => $walker,
'theme_location' => $theme_location));
}
//Create the shortcode
add_shortcode("listmenu", "list_menu");
To use this shortcode within a post
This works particularly well in conjunction with the side content plugin, allowing custom indexes for child pages within the sidebar.