Ready to get started?Download WordPress


Attention Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!


导航菜单是在 3.0 版本中加入的新主题特性。它让您方便地将自定义的导航菜单加入主题中。要使主题支持导航菜单,主题作者需要在主题中加入一些代码。




首先, 进入您主题的 functions.php 文件, 您需要编写一个函数注册您菜单的名称. (您可以到仪表台的 外观 -> 菜单 中找到它.) 例如, this menu would appear in the "Theme Locations" box as "Header Menu".

function register_my_menus() {
    array('header-menu' => __( 'Header Menu' ) )

And this would make two menu options appear, header menu and extra menu -

function register_my_menus() {
    array( 'header-menu' => __( 'Header Menu' ), 'extra-menu' => __( 'Extra Menu' ))

Then you need to ensure that the theme turns these menu options on, so you need this bit of code as well -

add_action( 'init', 'register_my_menus' );

The above tells the theme to run your "register_my_menus" procedure. As you can see, your new function makes use of the WordPress register_nav_menus functionality.

Now add locations to your template files

Once you've done that, your theme will be almost ready. The last preparation step is to tell the theme where you want the menus to show up. You do this in the relevant theme file. So, for example, we might want our header menu to be in header.php. So open up that file in the theme editor, and decide where you want to put your menu. The code to use here is wp_nav_menu which we will need once for each menu location. So, add this code -

<?php wp_nav_menu( array( 'theme_location' => 'header-menu' ) ); ?>

All you need to ensure is that the theme_location points to the name you provided for your menu in the functions.php code above. (Note that it's the header-menu being used here rather than Header Menu without a hyphen. header-menu is the name that the code understands, Header Menu is the human-readable version that you see in the admin page.)

To complete the code, you can put your extra menu someplace else. Maybe you want a menu on one of your pages, for example, and you might even want it to be jazzed up a little with a containing DIV of a certain class -

wp_nav_menu( array( 'theme_location' => 'extra-menu', 'container_class' => 'my_extra_menu_class' ) );

So you'd put the above into your Page template, and not only would the menu show up wherever you put it, it'd be styled as my_extra_menu_class so that you can work with that in CSS.

Back to the Menus Panel

That's all the background work. To finish, you would simply visit the Appearance -> Menus panel in your site admin. Now, instead of seeing some text suggesting that your theme doesn't natively support menus, you'll see some Theme Location options.

You can now use the GUI menu creator on this admin panel to put your menu(s) together. Give them each a name, and then assign a menu to a location with the pull-down options.

External Resources


Navigation Menu: register_nav_menus(), register_nav_menu(), unregister_nav_menu(), has_nav_menu(), wp_nav_menu(), wp_get_nav_menu_items()

See also index of Function Reference and index of Template Tags.
本文已被标记为未完成状态。您可以将其补充或翻译完整,以此帮助完善 Codex。