存档页面中自定义循环的问题

时间:2020-01-28 作者:Mathieu Préaud

我在存档中自定义了我的循环。php每页显示8篇文章。但是,我在传递参数时遇到了一个问题:循环显示所有类别中的所有帖子。

以下是我的循环PHP代码:

<?php
$archive_args = array( \'posts_per_page\' => 8 );

  query_posts( $archive_args );

  if ( have_posts() ) : while (have_posts()) : the_post();

    get_template_part( \'template-parts/content\', \'archive\' );

  endwhile;

  wp_reset_postdata();

  else :

    get_template_part( \'template-parts/content\', \'none\' );

  endif; 
?>
我试着用WP_query();query_posts(); 同样的问题。

任何帮助都将不胜感激,谢谢!

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

问题是您没有保存自定义查询的结果。要按自己的方式执行,需要将查询结果保存到变量中,如下所示:

$myposts = query_posts( $archive_args );
if ( $myposts->have_posts() ) : while ($myposts->have_posts()) : $myposts->the_post();
然而,这不是最有效的方法。WP除了运行此自定义查询外,还运行默认查询。所以,你最好使用pre_get_posts 更改主查询并仅使用其结果,这意味着您无需执行自定义查询或添加$myposts 完全是一部分。

你的pre_get_posts 过滤器应该很简单,如:

// If this is the main query, not in wp-admin, and it\'s for an archive
if($query->is_main_query() && !is_admin() && $query->is_post_type_archive()) {
    // Pull 8 posts per page
    $query->set(\'posts_per_page\', \'8\');
}