参数
- $locations
-
(string[]) (可选) 菜单位置标识符(类似slug)和描述文本的关联数组。
默认值: array()
说明
请参见register_nav_menu()以创建单个菜单,以及导航菜单以添加主题支持。
此函数自动注册主题的自定义菜单支持,因此您不需要调用add_theme_support( 'menus' );
使用wp_nav_menu()显示自定义菜单。
在菜单管理页面上,有一个“显示高级菜单属性”来允许“链接目标”“CSS类”“链接关系(XFN)描述”
使用 get_registered_nav_menus获取已在主题中注册的菜单列表。
源码
更新日志
版本 | 描述 |
---|---|
3.0.0 | 开始引入 |
使用示例
if ( ! function_exists( 'mytheme_register_nav_menu' ) ) { function mytheme_register_nav_menu(){ register_nav_menus( array( 'primary_menu' => __( 'Primary Menu', 'text_domain' ), 'footer_menu' => __( 'Footer Menu', 'text_domain' ), ) ); } add_action( 'after_setup_theme', 'mytheme_register_nav_menu', 0 ); }
重构菜单slug:
如果您只是重命名注册菜单位置的slug,它将从前端消失。这意味着您需要将菜单重新分配到仪表板中的新位置。
为了编辑菜单位置的slug,同时自动保留先前分配的菜单,请在
register_nav_menu()
中重命名slug后自定义并使用以下代码段:function cebbi_update_menu_location() { // Get assigned menus from theme mods $nav_menu_locations = get_theme_mod('nav_menu_locations'); // Check if old-slug was previously assigned if (isset($nav_menu_locations['old-slug'])) { // Verify that new location does not yet exist or is empty to avoid overwriting manual changes if (!isset($nav_menu_locations['new-slug']) || $nav_menu_locations['new-slug'] === 0) { // Copy assigned menu index to new location $nav_menu_locations['new-slug'] = $nav_menu_locations['old-slug']; // Optional: delete the menu assignment to the old location unset($nav_menu_locations['old-slug']); // Update theme mod set_theme_mod('nav_menu_locations', $nav_menu_locations); } } } add_action('after_setup_theme', 'cebbi_update_menu_location');
此外,不要忘记更新用于显示菜单的slug(
wp_nav_menu()
、has_nav_menu()
)。在删除分配的菜单之前,您可以使用get_registered_nav_menus()来验证
old-slug
是否未在主题中注册。示例
register_nav_menus( array( 'pluginbuddy_mobile' => 'PluginBuddy Mobile Navigation Menu', 'footer_menu' => 'My Custom Footer Menu', ) );
从自定义分类创建菜单。
例如:我有一个名为“Country”的自定义分类法,列表中有几个国家
现在我想为每个国家分配一个私有名称,并将其作为前端显示的条件。$tax = 'country-category'; $terms = get_terms( $tax, [ 'hide_empty' => false, ]); $args = array( 'primary' => __( 'Primary Menu', 'khoipro' ), 'secondary' => __( 'Secondary Menu', 'khoipro' ) ); // Loop through all terms to add term id as menu id and term name as menu name. foreach( $terms as $term) { $args = array_merge($args, array( 'primary_'.$term->slug => 'Country Menu ('.$term->name.')' )); } register_nav_menus( $args );
因此,我的输出代码应该显示在菜单中>管理位置:
* Primary Menu (id: primary)
* Secondary Menu (id: secondary)
* Country Menu (Japan) (id: primary_japan)
* Country Menu (Singapore) (id: primary_singapore)
* Country menu (Vietnam) (id: primary_vietnam)用一个新创建的项目在实际实践中进行证明。
//function to add nav menu in Navigation Bar and Footer Bar: function add_nav_menus() { register_nav_menus( array( 'nav menu'=>'Navigation Bar', 'footer menu'=> 'Footer Bar', )); } add_action('init', 'add_nav_menus');