在菜单中排除空子类别

时间:2015-02-04 作者:Annie

我在WooCommerce工作,试图筛选出空的子类别。我找到了这个代码,它过滤掉了所有的“空”。。。包括我的主页链接、关于我们的链接等。

function exclude_empty_cat_menu_items( $items, $menu, $args ) {
  // Get a list of product categories that excludes empty categories
  $non_empty_categories = get_categories(array(\'taxonomy\' => \'product_cat\'));
 // Iterate over the menu items
 foreach ( $items as $key => $item ) {
$is_empty = true;
// check current item is in the non-empty categories array
foreach ( $non_empty_categories as $key => $cat )
  if ($item->title == $cat->name) 
    $is_empty = false;
  // if it is empty remove it from array
  if ($is_empty) unset($items[$key]);
}
 return $items;
 }
  add_filter( \'wp_get_nav_menu_items\', \'exclude_empty_cat_menu_items\', null, 3 );
这是我的菜单。。。

<?php               
$args = array(
\'theme_location\' => \'lower-bar\',
\'depth\' => 0,
\'container\' => false,
\'fallback_cb\' => false,
\'menu_class\' => \'nav navbar-nav\',
\'walker\' => new BootstrapNavMenuWalker()
 );
 wp_nav_menu($args);
 ?>
我不赞成这样使用WordPress菜单。我通常会硬编码。有没有什么方法可以在过滤掉空的子类别的同时显示所有父类别和页面?

1 个回复
SO网友:karpstrucking

我会稍微改变一下。仍在使用wp_get_nav_menu_items 过滤器,但首先我将构建一个包含所有空项ID的数组。然后我会比较$items 对于潜在的排除:

add_filter( \'wp_get_nav_menu_items\', \'wpse177082\', 10, 3 );
function wpse177082 ( $items, $menu, $args ) {
        global $wpdb;
        $empty = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
        foreach ( $items as $key => $item ) {
                if ( ( \'taxonomy\' == $item->type ) && ( in_array( $item->object_id, $empty ) ) ) {
                        unset( $items[$key] );
                }
        }
        return $items;
}
当然,如果需要,您可以进一步将其限制为仅影响WooCommerce产品类别。

结束

相关推荐

每页完全不同的Functions.php?

是否可以通过条件加载完全不同的函数?i、 函数中的e。php您有一个条件加载在旧函数的include中,然后有另一个条件加载在新函数中?这样做的原因是一个网站正在呈现新的面貌,但只是一页一页,旧的样式和功能很混乱,需要更换,但我不能只是删除它们,因为网站的其余部分将失败。