通过自定义菜单的下一页链接

时间:2014-09-14 作者:pixeline

我想在几个页面模板的底部显示一个“下一个链接”,使用它们所在的实际自定义菜单。我构建了一个功能,除了边缘情况(进一步解释)外,它大部分都可以工作。我想知道你是否看到了我的一个明显错误,可以解释这些?

这是我的函数(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\');

1 个回复
最合适的回答,由SO网友:pixeline 整理而成

事实证明,我通过将我的员工模板从archive-staff.phppage-staff.php (或其他相关内容),从而明确告诉Wordpress不要信任模板层次结构逻辑,并将该url视为“页面”url,而不是自定义帖子类型存档。

如果您碰巧使用了此功能,请注意它主要用于页面模板。其他任何东西都需要测试,后期归档将无法工作。

结束

相关推荐

How to add taxonomy in menus?

书籍(自定义帖子类型)小说(税)科学(税)历史(税)--书籍体裁(税务)小说(术语)科学(学期)历史(学期)以下哪一项是做这件事的“好方法”?对于前一个(这是我目前在管理菜单中的功能,我为每个功能都提供了“register\\u taxonomy”功能),我无法选择要在菜单中显示的“Tax”。而对于后者,我可以将它们添加到菜单中,只需要一个“register\\u taxonomy”函数。