为什么我必须使用带有自定义WP_QUERY的PRE_GET_POSTS来重置POSTS_PER_PAGE?

时间:2016-03-20 作者:Benn

这毫无意义,我在存档中使用自定义查询。php做砖石布局。

$term_id        = get_queried_object_id();
$paged          = 1;
if ( get_query_var(\'paged\') ) { 
    $paged = get_query_var(\'paged\'); 
} elseif ( get_query_var(\'page\') ) { 
    $paged = get_query_var(\'page\'); 
}
$tax_query      = array();
if ( $term_id != \'0\' ) {
    $tax_query = array(
        array(
            \'taxonomy\' => \'category\',
            \'field\'    => \'id\',
            \'terms\'    => $term_id
        )
    );
}

$args = array(
  \'posts_per_page\'  => 1,
  \'post_type\'       => \'post\',
  \'orderby\'         => \'date\',
  \'order\'           => \'desc\',
  \'paged\'           => $paged,
  \'tax_query\'       => $tax_query,
  \'order\'           => \'DESC\',
  \'orderby\'         => \'date\'
);




$query = new WP_Query( $args );
然后进行循环和分页

<?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <?php get_template_part( \'templates/blog\',\'item\'); ?>
<?php endwhile;?>
<?php custom_pagination($query->max_num_pages,1,$paged ); ?>
<?php  wp_reset_postdata(); ?>
分页功能就是这个http://callmenick.com/post/custom-wordpress-loop-with-pagination

一切都很好,页面数量,博客项目,一切,

enter image description here

正如您可以从上面的图像中看到的,我测试了多个分页,以确保我做得正确。在单击某些分页链接之前,一切都正常。Blog pages show at most 设置接管,我得到404页。

我尝试了stack上的所有建议,以重置每页的posts\\u,但在我这样做之前,一切都不起作用

function _action_set_posts_per_page( $query ) {

        $query->set( \'posts_per_page\',1);


}
add_action( \'pre_get_posts\', \'_action_set_posts_per_page\' );
这一点都没有意义,我必须运行多个检查,以确保不会打乱其他人的分页。如果我的自定义查询已经posts_per_page 定义

请有人给我点化一下。

1 个回复
SO网友:Milo

存档中的页数基于主查询的结果。您不能将自定义查询分页到超过主查询包含的页数,因为在加载运行自定义查询的模板之前,它被确定为404。改变posts_per_page 运行自定义查询很有效,因为您已使两个查询上的页数匹配。

如果您想对自定义查询做的唯一不同的事情是更改posts_per_page, 然后您应该完全删除自定义查询并仅使用pre_get_posts 具有some sort of is_ check 确保只更改要更改的存档查询。