如何将_POSTS_导航用于wp_Query和Get_Posts?

时间:2015-01-15 作者:Vincent Wong

WordPress拥有the_posts_navigation 自4.1.0起运行。但我不知道如何使用wp_queryget_posts. 以下代码位于页面的模板文件中
wp_query method:

    <?php
    if ( get_query_var(\'paged\') ) {
    $paged = get_query_var(\'paged\');
    } else if ( get_query_var(\'page\') ) {
    $paged = get_query_var(\'page\');
    } else {
    $paged = 1;
    }

    $get_posts=new wp_query(\'post_type=case&posts_per_page=2&paged=\'.$paged);

    while($get_posts->have_posts()):$get_posts->the_post();
    the_title();
    endwhile;

    the_posts_pagination( array(
        \'prev_text\'          => __( \'Previous page\', \'cm\' ),
        \'next_text\'          => __( \'Next page\', \'cm\' ),
        \'before_page_number\' => \'<span class="meta-nav screen-reader-text">\' . __( \'Page\', \'cm\' ) . \' </span>\',
    ) );
    ?>

get_posts method:

    <?
    while(have_posts()):the_post();
    if ( get_query_var(\'paged\') ) {
        $paged = get_query_var(\'paged\');
        } else if ( get_query_var(\'page\') ) {
        $paged = get_query_var(\'page\');
        } else {
        $paged = 1;
    }

    $case_posts=get_posts(\'post_type=case&posts_per_page=2&paged=\'.$paged);
    echo \'<pre>\';
    print_r($case_posts);
    echo \'</pre>\';
    foreach($case_posts as $case_post){
        echo $case_post->post_title;
    }
    endwhile;
    // Previous/next page navigation.
    the_posts_pagination( array(
        \'prev_text\'          => __( \'Previous page\', \'cm\' ),
        \'next_text\'          => __( \'Next page\', \'cm\' ),
        \'before_page_number\' => \'<span class="meta-nav screen-reader-text">\' . __( \'Page\', \'cm\' ) . \' </span>\',
    ) );
    ?>
它们不工作并显示分页,但输入http://127.0.0.1/gdboer/?page_id=74&page=2 在地址栏中手动操作,即可工作。谁能帮我,非常感谢!

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

the_posts_navigation() 只是一个包装函数get_the_posts_navigation() 这是一个简单的包装函数paginate_links. 前两个函数使用的参数与paginate_links 并实际将其传递给后一个函数

get_the_posts_navigation()the_posts_navigation() 这是一个很好的新功能,因为它消除了许多自定义编码,而且对于希望使用编号分页链接的新的无经验用户来说,它更加友好

唯一的缺陷get_the_posts_navigation() 就是开发人员去包装paginate_links 条件语句中的函数,该语句声明如果主查询($wp_query) 少于1页,(请记住,第一页是0 第二页是2), 不显示链接。这对于页面模板上的自定义查询是有问题的。页面始终只有一个页面,因此这些函数不能用于自定义查询

如果必须使用the_posts_navigation(), 是利用@ChipBennet answer inthis post. 我真的不喜欢取消主查询(相当粗糙,在我看来这就像使用query_posts) 但我看不到其他解决方案get_the_posts_navigation() 使用自定义查询的步骤

SO网友:Eran Or

我有一个自定义模板,我花了几个小时才显示分页组件。这是对我有用的东西。

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
    \'posts_per_page\' => 3,
    \'orderby\' => \'menu_order\',
    \'order\'=> \'ASC\',
    \'paged\'=>$paged,
    \'post_type\' => \'projects\'
    );

$projects = new WP_Query($args);

            <!-- working example of pagination with numbers -->
            ...<?php endwhile;?>
                <?php 
                $GLOBALS[\'wp_query\']->max_num_pages = $projects->max_num_pages;
                the_posts_pagination( array(
                   \'mid_size\' => 1,
                   \'prev_text\' => __( \'Back\', \'green\' ),
                   \'next_text\' => __( \'Onward\', \'green\' ),
                   \'screen_reader_text\' => __( \'Posts navigation\' )
                ) ); ?>
             OR
             <!-- working example of pagination without numbers -->
             ...<?php endwhile;?>   
             <?php next_posts_link(  \'next\', $projects->max_num_pages ); ?>
             <?php previous_posts_link(\'prev\') ?>

SO网友:Leo Caseiro

此函数使用get_the_posts_pagination() 使用全局wp_query 要设置paginate_links() 功能,所以我认为这不适用于get_posts.

尝试使用该功能paginate_links() 自身或功能posts_nav_link()

PS:确保您使用wp_reset_query()

结束

相关推荐

按自定义域(wp-Query和循环)排序和显示帖子)

我只想在主页上显示即将到来的活动帖子。我使用“custom field suite”插件创建了一个自定义字段,名为“ENDS”,表示事件结束的日期。正如你所知,我只想在家里举行即将到来的活动,最接近现在的日期排在第一位。过期后,我希望将其归档到“归档”中,该页面在另一个页面上可见(该页面还应以最近过期的事件开始排序归档的事件帖子)。模板使用无限滚动加载帖子,这是我的索引文件,带有默认循环:http://pastebin.com/x3NzZBZX我需要集成这样的东西,但没有成功:<?php $