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:
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?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 z.B. über CodeSnippets in WordPress einbauen. So können direkte Änderungen am Theme vermieden werden und WooCommerce bleibt update-fähig.
Hi, danke für das Snippet. Funktioniert super auf meiner Woocommerce-Seite. Ich hab nur ein Problem: Auf meiner Kategorieübersichtsseite tauchen die leeren Kategorien noch auf.
Kann man das Snippet so erweitern, dass die leeren Kategorien auch dort herausgefiltert werden … oder ggf. ein neues Snippet für den Fall schreiben?
Wäre super, denn ich glaube, das Problem haben andere auch … oder noch nicht erkannt. ;)
CU :)
Das hier sollte passen. In dem Beispiel wird die Kategorie “uncategorised” ausgeblendet:
Danke, hab schon anderweitig eine Lösung gefunden. Dennoch bestimmt hilfreich für andere Woocommerce-User. :)
Für die Skript-Lösung leere Kategorien aus der Navigation auszublenden muss ich leider mein “funktioniert!” zurück ziehen. Das hat leider nur anfangs funktioniert. Vielleicht hat mir der Cache auch nur was vorgegaukelt.
Der negative Effekt war, dass sämtliche Seiten, die als Untermenüs in der Navi eingefügt waren, verschwunden waren. Beim erneuten Einfügen waren sie nach dem Abspeichern wieder verschwunden. Auch das Erhöhen der max_input_vars auf riesige 10.000 ergab keinen Erfolg. Wenn ich sie dagegen auf der ersten Ebene eingefügt hatte, blieben sie.
Erst nachdem ich dein Skript wieder entfernt hatte, waren alle Untermenüs (und auch die mehrfachen Versuche ;) ) wieder da.
Kannst du bitte nochmal dein Skript checken, ob das evtl. mit WP 5.9 und / oder PHP 8 nicht mehr richtig funktioniert?
Wäre super! :)
Dank dir schon im Voraus :)
Das Skript ist aktuell unverändert auf einer Seite mit Avada im Einsatz. Evtl. ein Problem mit deinem Theme oder einem Plugin?
Tja, das wird es dann wohl sein. Ich kontaktier mal den Theme-Entwickler.