Die Menüelemente können anhand der Kategorie der Seiten im Menü mit wp_nav_menu nicht gefiltert / gruppiert werden

In meiner WordPress-Website habe ich die Navigationsanforderungen Bit anders als die bereitgestellten Menüfunktionalität. In dieser oberen Navigation wäre der Tab der Name der Kategorie und alle Seiten-URLs unter dieser Registerkarte wären die Seiten, die diese Kategorie zugeordnet haben. Zum Beispiel, wenn ich eine Kategorie namens SPORTS und Seiten Hockey, Cricket, Badminton und Tennis haben, sind mit dieser Kategorie SPORTS verbunden . Ich brauche diese Seiten in der Navigation wie folgt –

SPORT
-Eishockey
-Kricket
-Badminton
-Tennis

Ich möchte HTML-Markup wie folgt erstellen:

 

Ich verwende wp_nav_menu( $args ) . Könnte jemand mir beim Filtern / Gruppieren der Menüpunkte / Seiten basierend auf der Kategorie helfen?

BEARBEITEN – Wir benötigen keine Seite für SPORTS in CMS, also keinen Seitenlink auch auf dem. Ich kann sagen, dass es nur ein Kategorie Name der Seiten ist, die unter dieser Registerkarte als Menüpunkte (Hockey, Cricket usw.) kommen. Ich denke über einen Ansatz nach, die Kategorienamen direkt über den Menüpunkten dieser Kategorie zu drucken. Ich bin in der Lage, diese Menüpunkte mit Hilfe von wp_nav_menu ($ args) perfekt zu drucken, aber nicht in der Lage, den Kategorienamen aller Menüelemente (Seiten) direkt über ihnen zu drucken.

Kurz gesagt – ich möchte Seiten im wp_nav_menu ($ args) gruppieren, basierend auf ihrer assoziierten Kategorie innerhalb eines Endloslaufs für alle Kategorien.

Solutions Collecting From Web of "Die Menüelemente können anhand der Kategorie der Seiten im Menü mit wp_nav_menu nicht gefiltert / gruppiert werden"

Sie müssten eine benutzerdefinierte class Walker_Nav_Menu , die Walker_Nav_Menu erweitert. Walker_Nav_Menu ist der Standard-Walker für wp_nav_menu() .

Die Umsetzung wäre so:

 $args = [ 'menu_id' => 'main_menu', 'walker' => new SE287172_Walker_Nav_Menu() ); wp_nav_menu( $args ) 

Sie möchten dem Menüelement auch eine benutzerdefinierte class hinzufügen. In diesem Beispiel verwenden wir die vinayak-custom-class , wie Sie im unten stehenden Code sehen können.

Sie müssten Ihren Walker definieren und die start_el() -Methode überschreiben. Auf diese Weise können Sie abhängig von einer Reihe von Dingen zusätzliche HTML-Markups hinzufügen. Sie haben das Menüelementobjekt zur Hand, sodass Sie das benutzerdefinierte Untermenü auf eine class, den Titel, die ID usw. aufbauen können.

Ich würde eine class empfehlen, da ein Titel hart geschrieben werden kann, wenn der “SPORTS” -Menü “Our Sports” oder etwas Ähnliches wird und Ihr Untermenü verschwindet.

Sie würden dies in Ihre functions.php Datei oder idealerweise in eine andere Datei in einer /includes/my-nav-menu-walker.php (oder ähnlich) /includes/my-nav-menu-walker.php wo Sie Ihren Code organisiert halten.

 class SE287172_Walker_Nav_Menu extends Walker_Nav_Menu { public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { // Let the main class do it's thing first. Then shove your submenu in. parent::start_el( $output, $item, $depth, $args, $id ); // Now do your class check $classes = empty( $item->classes ) ? array() : (array) $item->classes; if ( in_array( 'vinayak-custom-class', $classes ) { // Do your Submenu HTML Output $output .= 'My Sports Sub-menu goes here'; } } } 

An dieser Stelle können Sie dann einen get_posts() Aufruf innerhalb der get_posts() , um Ihre Seiten in der Kategorie “Sport” zu get_posts() und sie get_posts() , um Ihre

  • -Struktur zu erstellen.