在WordPress中为每个类别创建菜单位置

时间:2014-01-14 作者:Sinac

我需要在wordpress的每个分类页面中显示一个特殊菜单,

例如,我有3个类别:马、狗、猫

所以我必须在菜单设置中有3个菜单locations 名称:马、狗、猫

使用此代码functions.php 我获得所有类别名称:

$category_ids = get_all_category_ids();
foreach($category_ids as $cat_id) {
  $cat_name = get_cat_name($cat_id);
  $arr = $cat_name;
}
并且使用此代码functions.php I注册菜单:

register_nav_menus( array(
  \'primary\' => \'Main Navigation\',
  \'secondary\' => \'Footer Navigation\',
  $arr
));
但它不起作用,只注册最后一类,我想我们必须导入register_nav_menus\'sarray 在里面foreach, 但我不知道怎么做

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

我认为你做得不对。这个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 );

SO网友:RachieVee

从使用var\\u dump($arr)来看,它似乎仍在吐出一个WordPress不知道该如何处理的数组。与$cat\\u name相同。您必须告诉WordPress,对于该数组中来自$category\\u id的每个id(您现在正在为单个id调用$cat\\u id),您需要获取每个id的名称,并为每个id注册一个菜单。

<?php 
$category_ids = get_all_category_ids();
foreach($category_ids as $cat_id):
    $catName = get_cat_name( $cat_id );
    register_nav_menu($cat_id, $catName);
endforeach;
?>
我不确定是否有更干净的解决方案,以便您不必多次注册\\u nav\\u菜单,但这似乎是可行的。希望有帮助。

此外,如果您需要有关数组的更多说明,this course on tutsplus 帮了我很多!

结束

相关推荐

为什么is_earch不能在函数.php中工作?

我正在尝试使用is\\u search从函数中输出一些内容。php。我在实际搜索页面本身上使用is\\U搜索,效果很好:if(is_search()) { echo get_search_query( \'<h1>\', \'</h1>\' ); } 但从功能上来说。php这不起作用:function data_scroll_all(){ if(is_search()) { $offset = $_POST[\'of