Verknüpfung der nächsten Seite über das benutzerdefinierte Menü

Ich möchte einen “nächsten Link” am unteren Rand mehrerer Seitenvorlagen anzeigen, indem ich das eigentliche benutzerdefinierte Menü verwende, in dem sie sitzen. Ich habe eine function erstellt, die größtenteils funktioniert, außer für einen Randfall (wird weiter erläutert). Ich frage mich, ob Sie vielleicht einen offensichtlichen Fehler sehen, der diese erklären könnte?

Hier ist meine function (in functions.php)

/* FIND WHAT IS THE NEXT MENU ITEM FROM A GIVEN PAGE TEMPLATE used in The School pages to present teaser (bottom of the pages) usage: $next_post = get_next_menu_item('menu-id-name'); */ function get_next_menu_item($menu_name){ global $post; $menu = wp_get_nav_menu_object( $menu_name ); $menuitems = wp_get_nav_menu_items( $menu->term_id, array( 'order' => 'DESC' ) ); $i=-1; foreach ( $menuitems as $item ): $i++; $id = get_post_meta( $item->ID, '_menu_item_object_id', true ); if ($id == $post->ID){ $next_id = $i; } endforeach; $next = $menuitems[$next_id+1]; $next = get_post_meta( $next->ID, '_menu_item_object_id', true ); return get_post($next); } 

Fall, in dem ein falsches Menüobjekt zurückgegeben wird

Ich habe einen benutzerdefinierten Beitragstyp “Personal”. Um einen Link zu seinem Inhalt von den benutzerdefinierten Menüs zu haben, habe ich eine Seite mit der Vorlage archive-staff.php erstellt. Auf dieser Seite ruft meine function einen falschen Post ab.

Die Staff-Vorlage erstellt die Hauptschleife unabhängig von query_vars. Hier ist es, nur für den Fall, dass es wichtig ist.

 global $wpdb; global $post; $sql = "SELECT * FROM `bj_posts` p LEFT JOIN ( SELECT post_id, meta_value as purpose FROM `bj_postmeta` pm WHERE `meta_key`='_staff_purpose' ) pm ON p.ID=pm.post_id WHERE p.`post_type`='staff' AND p.`post_status`='publish' ORDER BY purpose ASC, post_title ASC"; $staff_members = $wpdb->get_results($sql, ARRAY_A); 

Ergebnisse, durch die ich Schleife, und vor dem Aufruf meiner function, setze ich die Abfrage zurück.

  wp_reset_query(); wp_reset_postdata(); $next_page = get_next_menu_item('the-school'); 

Solutions Collecting From Web of "Verknüpfung der nächsten Seite über das benutzerdefinierte Menü"

Es stellte sich heraus, dass ich das Problem triggerse, indem ich meine Staff-Vorlage von archive-staff.php in page-staff.php (oder irgend etwas anderes) umbenannte und WordPress ausdrücklich anwies, der Template-Hierarchie-Logik nicht zu vertrauen und diese URL als zu betrachten Eine “Seiten” -URL, kein benutzerdefiniertes Post-Archiv.

Wenn Sie diese function verwenden, beachten Sie, dass sie hauptsächlich für Seitenvorlagen verwendet wird. Alles andere muss getestet werden, und Post-Archive funktionieren nicht.