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:
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!
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:
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";
}
}
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
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.
Kurz gesagt, es gibt keinen einfachen orderby => 'My Menu'
, Sie müssen eine Alternative oder einen Workaround finden.
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).