it-swarm.com.de

Reihenfolge nach Menüstruktur

Da mache ich eine Seite Website. Hier ist die Frage, die ich früher gestellt habe:

Aufruf bestimmter Seiten mit WP-Abfrage Teil II

Da ich alle Seiten mit WP_Query aufrufe, was "order by = ASC" ist, möchte ich "order by menu structure" und nicht menu_order nennen.

Für zB: screenshot

Jetzt möchte ich nach Hause, um dann Dienstleistungen, dann Zeugnisse. abhängig von der Menüstruktur.

Wie kann ich es erreichen .. Bitte um Hilfe .. Danke im Voraus!

2
Hussy571

Sie können können eine WP_Query für nav_menu_item verwenden, da es sich um einen eigenen Beitragstyp handelt. Ich habe das noch nie gemacht, aber vielleicht würde es so funktionieren, wie Sie es brauchen, einen Versuch wert. Es gibt drei weitere Möglichkeiten:

Option 1 - Holen Sie sich Ihre Navigationsmenüpunkte

Es gibt eine Funktion namens wp_get_nav_menu_items() , die Ihnen eine Reihe Ihrer Menüpunkte zurückgibt, die Sie dann durchlaufen und anzeigen können. Hier ist ein Beispiel, wie Sie es verwenden könnten. Es gibt ein paar "Gotcha!" Hier:

  • $item->ID ist die aktuelle Navigationselement-ID nicht der post_id. Die Beitrags-ID lautet jetzt $item->object_id.
  • $item->title ist der aktuelle Titel des Navigationselements und nicht unbedingt der post_title, obwohl er standardmäßig noch geändert werden kann. Der zuverlässigste Weg, den Post-Titel zu erhalten, besteht darin, den object_id zu verwenden und ihn an die get_the_title()-Funktion zu übergeben.

$nav_items = wp_get_nav_menu_items( 'Main Menu', array(
    'order'                  => 'ASC',                  // List ASCending or DESCending
    'orderby'                => 'title',                // Order by your usual, menu_order, post_title, etc. Check WP_Query
    'post_type'              => 'nav_menu_item',        // To be honest, I'm not sure why this is an option, leave it be.
    'post_status'            => 'publish',              // If there are private / draft posts in our menu, don't show them
    'output'                 => ARRAY_A,                // Return an Array of Objects
    'output_key'             => 'menu_order',           // Not sure what this does
    'nopaging'               => true,                   // Not sure what this does
    'update_post_term_cache' => false                   // Not sure what this does
) );

if( ! empty( $nav_items ) ) {
    foreach( $nav_items as $item ) {
        echo "{$item->title} - " . get_the_title( $item->object_id );
        echo "<br />\n";
    }
}

Option 2 - Benutzerdefinierter Nav Walker

Sie können Ihr Menü einfach so anzeigen, wie es wp_nav_menu() verwendet, und eine Benutzerdefinierte Walker-Funktion übergeben, um die Ausgabe zu ändern. Ein Beispiel hierfür ist das automatische Abrufen der untergeordneten Seiten dieser Menüelemente, ohne diese Seiten tatsächlich dem physischen Menü hinzuzufügen. Kinderwandererklasse

Option 3 - Seitenmenüreihenfolge

Wenn ich eine Website für einen Kunden erstelle, habe ich normalerweise ein WordPress-Menü und spiegele auch die Seitenreihenfolge des Admin-Panels mit dem Seitenattribut menu_order. Auf diese Weise können Sie Seiten mit WP_Query und orderby => 'menu_order' abfragen.

Image Found on codeholic.in


Kurz gesagt, es gibt keinen einfachen orderby => 'My Menu', Sie müssen eine Alternative oder einen Workaround finden.

3
Howdy_McGee

Sie können die Funktion wp_get_nav_menu_items () anstelle von wp_query () verwenden, um die Menüelemente aus einem bestimmten Menü in der Menüstrukturreihenfolge abzurufen. Sobald Sie dies getan haben, können Sie die Menüpunkte nacheinander durchlaufen, um dies nach Ihren Wünschen zu tun (einschließlich des weiteren Filterns nach Typ oder anderen Informationen). Dies setzt voraus, dass sich alle Seiten im Menü befinden (was erforderlich wäre, wenn Sie dies zum Verständnis der Reihenfolge verwenden würden).

2
Amanda Giles