Kommt es in WooCommerce zu leeren Kategorien, so werden diese standardmässig nicht im Menü ausgeblendet – leider keine zufriedenstellende User-Experience.

Mit dem folgenden Code lässt sich das Problem in WooCommerce elegant lösen:

<?php
// Hides empty WooCommerce Categories in Menu Bar.
// Protects first level menu items
//
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 id is in the non-empty categories array
    foreach ( $non_empty_categories as $key2 => $cat )
      if ($item->title === $cat->name || $item->menu_item_parent == 0) 
        $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 );
?>

Diese Filterfunktion lässt sich sehr elegant mit dem “PHP Inserter Plugin” in WordPress einbauen. So können direkte Änderungen am Theme vermieden werden und WooCommerce bleibt update-fähig.