Ich arbeite in WooCommerce und versuche, die leeren Unterkategorien herauszufiltern. Ich habe diesen Code gefunden, der alles "Leere" herausfiltert ... einschließlich meines Homepage-Links, Über uns-Links usw.
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 );
Und hier ist meine Speisekarte ...
<?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);
?>
Ich bin nicht mit der Idee verheiratet, das WordPress-Menü auf diese Weise zu verwenden. Normalerweise schreibe ich es hart ein. Kann ich auf irgendeine Weise alle übergeordneten Kategorien und Seiten anzeigen, während leere untergeordnete Kategorien herausgefiltert werden?
Ich würde das etwas anders angehen. Verwenden Sie weiterhin den wp_get_nav_menu_items
-Filter, aber zunächst erstelle ich ein Array mit den IDs aller leeren Begriffe. Dann vergleiche ich jeden $items
mit diesem, um einen möglichen Ausschluss zu erreichen:
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;
}
Sie können dies natürlich weiter einschränken, sodass nur die WooCommerce-Produktkategorien betroffen sind, wenn dies erforderlich ist.