wp_nav_menu – Zeige nur Kinder des aktuellen Menüpunktes?

Ich versuche, eine Menüstruktur mit einem einfachen Konzept zu erstellen:

  1. Ein horizontales, 1-stufiges tiefes Hauptmenü
  2. Ein vertikales Untermenü, das untergeordnete Elemente des aktuellen Hauptmenüpunkts enthält (2 Ebenen tief)

Natürlich sollte das Untermenü in folgenden Fällen angezeigt werden:

  1. Anzeigen des Hauptmenüpunkts
  2. Direktes Kind des Hauptmenüeintrags anzeigen
  3. Einen Nachfahren des Hauptmenüeintrags anzeigen (3. Ebene)

Da ich das Menü sauber halten möchte, muss ich nur die 3. Ebene für den gerade aktiven Menüpunkt der 2. Ebene anzeigen.

Grundsätzlich möchte ich dasselbe erreichen, wie in diesem Thema beschrieben: Wie zeige ich nur Elternseiten des aktuellen Seitenelements im vertikalen Menü an? – ABER, mit wp_nav_menu ()

Ich würde gerne Filter oder benutzerdefinierte Walker verwenden, wenn jemand mich in eine richtige Richtung zeigen könnte.

Das Wichtige hierbei ist, dass wp_nav_menu auch benutzerdefinierte Links oder Kategorielinks enthalten kann, da die Lösung für alle diese Fälle funktionieren sollte.

Solutions Collecting From Web of "wp_nav_menu – Zeige nur Kinder des aktuellen Menüpunktes?"

Ich weiß nicht, ob das der beste Weg ist, aber ich würde so gehen-

1) Haken Sie den wp_nav_menu_objects Filter an. Die function erhält eine Liste aller Menüpunkte. Diese Menüeinträge enthalten bereits Informationen über die aktuelle Seite oder den Vorfahren der aktuellen Seite (einmal var_dump )

2) Deaktivieren Sie alle Menüpunkte, die nicht angezeigt werden sollen und geben Sie den Rest zurück

 foreach() { if() // this element should be displayed else // this element should be deleted, unset() it } 

3) display_element Methoden walk und / oder display_element im benutzerdefinierten Walker, standardmäßig werden die display_element innerhalb des

  • -Tags des übergeordneten display_element hinzugefügt, aber nach meinem Verständnis Ihres HTML-Codes benötigen Sie diese separat

    Alternativ können Sie, wenn Sie die Methode ” walk bereits überschreiben, aber den Großteil des Codes im benutzerdefinierten Walker beibehalten, einen benutzerdefinierten Filter für den zweiten Schritt oben erstellen. Dies würde diese Schleife viel einfacher machen, da die Elemente bereits sortiert sind