Posts Tagged ‘cms’

WordPress Tip: Adding Custom Menus to a Theme

If you're using WordPress 3.0 or above (which, if you're using WordPress, you really should be), you have the option of adding custom menus to your theme without extra plugins.

In the past, this was managed via plugins such as "Page Links To" and "Exclude Pages." Now, this can all be managed within the WordPress admin console and in your theme, with a decent amount of customization.

In this tutorial, I'm assuming you know the basics of PHP (enough to create your own theme, at least).

To tell WordPress that this theme supports menus, add the following code to your theme's functions.php file:

// I want to add a header and footer
register_nav_menus( array(
        'header' => 'Top Navigation',
        'footer' => 'Top Navigation',
));

To use a menu in your theme files, you will need to add a line similar to what's shown here. I added this in my header.php file for the top navigation, and added a similar line to footer.php:

wp_nav_menu('sort_column=menu_order&menu_class=header-nav&menu=header');

There are many more options available for how your menu is displayed; see the WordPress Codex page for wp_nav_menu.

To create your new menus in WordPress, go to the admin console, click Appearances > Menus. This screen is fairly self-explanatory. I was able to replace three plugins and some custom header and footer code using only this method, in about 10 minutes (including research on wp_nav_menu).

For even more hardcore customization using custom walkers (a feature described in the Codex), check out Christian Budschedl's excellent post, Improve Your WordPress Navigation Output.

Happy blogging!

Comments