我想在几个页面模板的底部显示一个“下一个链接”,使用它们所在的实际自定义菜单。我构建了一个功能,除了边缘情况(进一步解释)外,它大部分都可以工作。我想知道你是否看到了我的一个明显错误,可以解释这些?
这是我的函数(inside 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);
}
返回错误菜单对象的情况我有一个自定义的帖子类型“staff”。为了能够从自定义菜单中获得指向其内容的链接,我使用archive staff创建了一个页面。php模板。在该页面上,我的函数检索错误的帖子。
staff模板独立于query\\u vars重新创建主循环。给你,以防万一。
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);
在调用函数之前,我重置了查询。
wp_reset_query();
wp_reset_postdata();
$next_page = get_next_menu_item(\'the-school\');