Benutzerdefiniertes Menü mit unterschiedlichem Verhalten für jeden Artikel

Ich arbeite an einem benutzerdefinierten Menü, das besonders komplex ist, und ich möchte wissen, welcher der richtige Weg ist, um es zu erstellen.

Das ist die Struktur meines Menüs:

- Home (is a PAGE) - Information (Is a PAGE with a second level menu) |_________Items are the post for the category "information" - Data (It hasn't a PAGE, only a second level menu) |_________Items are the posts for the category "data" 

Was ist deiner Meinung nach der beste Weg, ein Menü wie dieses zu bauen? ist es möglich, es aus dem WP-Backend zu erstellen oder ist es besser, es nur aus Code in der Vorlage zu erstellen?

Solutions Collecting From Web of "Benutzerdefiniertes Menü mit unterschiedlichem Verhalten für jeden Artikel"

Es ist möglich, dies mithilfe der Unterstützung des walker_nav_menu_start_el Nav-Menüs zu tun, wobei classn als Marker verwendet werden, die dann über den walker_nav_menu_start_el Filter walker_nav_menu_start_el werden (die dann Abfragen zum Abrufen von Beiträgen und Einfügen ihres Markups durchführen).

z.B

 add_filter( 'walker_nav_menu_start_el', 'menu_show_media_post', 10, 4 ); function menu_show_media_post( $item_output = '', $item = '', $depth = '', $args = '' ) { global $post; $query = false; if ( is_array( $item->classes ) ) { foreach( $item->classes as $class ) { if ( $class == 'some_marker_class_to_watch_for_goes_here') { $query = true; } } } if ( $query ) { $args = array( ); $q = new WP_Query($args); if($q->have_posts()){ while($q->have_posts()){ $q->the_post(); // do stuff and append output to $item_output, dont echo it out } } wp_reset_postdata(); } return $item_output; } 

Alles in allem ist dies eine ziemlich fortgeschrittene Sache.

Wenn Sie einen Schritt weiter gehen möchten, können Sie den Menüauszügen selbst Benutzeroberflächensteuerelemente hinzufügen und die Daten als Post-Meta für jedes Menü-Navigationselement speichern. Dies wäre ein besserer Weg, aber es ist nichts für schwache Nerven, da es JS-Code im Admin-Backend benötigt, und ein benutzerdefinierter Walker, der den ursprünglichen HTML-Code für die Nav-Admin-Oberfläche ausgibt.