我在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菜单。我通常会硬编码。有没有什么方法可以在过滤掉空的子类别的同时显示所有父类别和页面?
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产品类别。