如何让分页在 WordPress 中为 get_posts() 工作?

新手上路,请多包涵

我正在开发一个 WordPress 网站,并且创建了一个页面模板,该模板按类别 slug 显示帖子。为此,我为页面创建了一个字段 WP_Catid,并将其设置为与我要从中显示帖子的类别 slug 相同。但是,我只希望每页显示五个帖子,并在这些帖子的底部显示分页链接。如何让分页链接正确显示?

我的代码如下:

 <div id="container">
  <div id="content" role="main">
    <?php
      $btpgid=get_queried_object_id();
      $btmetanm=get_post_meta( $btpgid, 'WP_Catid','true' );
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

      $args = array( 'posts_per_page' => 5,
                     'category_name' => $btmetanm,
                     'paged' => $paged,
                     'post_type' => 'post' );

      $myposts = get_posts( $args );
      foreach ( $myposts as $post ) : setup_postdata( $post );
        echo "<div style='border:2px groove black; margin-bottom:5px;'><h3 class='btposth'>";
        the_title();
        echo "</h3><div class='btpostdiv'>";
        the_content();
        echo "</div></div>";
      endforeach;
      next_posts_link( 'Older Entries'); //not displaying
      previous_posts_link('Newer Entries &raquo;'); //not displaying
      wp_reset_postdata();
    ?>
  </div><!-- #content -->
</div><!-- #container -->

原文由 B_Troutman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 396
2 个回答

如果您需要分页查询,请不要使用 get_postsget_posts 如果您要使用不需要分页的自定义查询,则可以完美工作,但是当您需要引入分页时,它确实变得非常复杂。

我认为这里最简单和最合适的是使用 WP_Query 来构建您的自定义查询,也就是说, 如果您不能使用 pre_get_posts 来更改主查询 以获取您的主查询的所需输出。

我确实认为 next_posts_link()previous_posts_link() 更适合用于自定义查询,即 WP_Query 。但是,您必须记住在使用自定义查询时设置 $max_pages 参数,否则您的分页将中断

通过一些小的调整,您的查询应该如下所示

<div id="container">
<div id="content" role="main">
<?php
$btpgid=get_queried_object_id();
$btmetanm=get_post_meta( $btpgid, 'WP_Catid','true' );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args = array( 'posts_per_page' => 5, 'category_name' => $btmetanm,
'paged' => $paged,'post_type' => 'post' );
    $postslist = new WP_Query( $args );

    if ( $postslist->have_posts() ) :
        while ( $postslist->have_posts() ) : $postslist->the_post();

             echo "<div style='border:2px groove black; margin-bottom:5px;'><h3 class='btposth'>";
                 the_title();
             echo "</h3><div class='btpostdiv'>";
                 the_content();
             echo "</div></div>";

         endwhile;

             next_posts_link( 'Older Entries', $postslist->max_num_pages );
             previous_posts_link( 'Next Entries &raquo;' );
        wp_reset_postdata();
    endif;
    ?>

</div><!-- #content -->
</div><!-- #container -->

原文由 Pieter Goosen 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试更改您的 $args:

 $args = array(
'posts_per_page' => 5,
'category_name' => $btmetanm,
'post_type' => 'post',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
   );

就在循环之后放这个:

 if (function_exists('wp_pagenavi')) {
wp_pagenavi();
}

原文由 hamza 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题