我认为你做得不对。这个theme_location
的参数wp_nav_menu()
是一个模板位置,即主题定义/注册的模板中的物理位置。它不是为基于任意用户内容的任意数量的位置而设计的。
如果要在特定模板位置输出特定于类别的菜单,最好有条件地输出特定于类别的菜单,并返回到自定义导航菜单。(或者,更好的方法是:有条件地输出用户指定的自定义导航菜单,并返回到您的类别菜单。)
例如:
<div id="cat-menu">
<?php
// if the user has assigned a menu, use it
if ( has_nav_menu( \'cat-menu\' ) ) {
wp_nav_menu( array(
\'theme_location\' => \'cat-menu\'
) );
}
// otherwise, if this is a category archive index page,
// output a category menu
else if ( is_category() ) {
// output a list of categories
}
?>
</div>
也就是说,您的问题主要是PHP/语法问题。您需要构建一个菜单位置数组,然后将构建的数组传递给register函数。
// Base menu locations
$menu_locations = array(
\'primary\' => \'Main Navigation\',
\'secondary\' => \'Footer Navigation\'
);
// Get categories
$category_ids = get_all_category_ids();
// Loop through them
foreach( $category_ids as $cat_id ) {
// Get the Category object
$cat_obj = get_category( $cat_id );
// Get the Category Slug
$cat_slug = $cat_obj->slug;
// Concatenate it as a menu slug
$menu_slug = $cat_slug . \'-menu\';
// Get the Category Name
$cat_name = $cat_obj->name;
// Concatenate it as a menu name
$menu_name = $cat_name . \' Menu\';
// Now add it to the array of menu locations
$menu_locations[$menu_slug] = $menu_name;
}
// Now register
register_nav_menus( $menu_locations );