循环中的帖子少于对象$ wp_query中的帖子

时间:2016-11-15 20:42:44

标签: php wordpress loops

我看到一些奇怪的行为,我无法在基于类别的模板循环中解释。

我有一个类别模板的自定义查询过滤器,预先选择要查询的几个自定义帖子类型:

add_filter( 'pre_get_posts', 'cust_posts_collection' );
function cust_posts_collection( $query ) {
  if ( (is_category() && $query->is_main_query()) )
    $query->set( 'post_type', array( 'cust_post_type_1', 'cust_post_type1' ) );
  return $query;
}

这会生成一个合适的$ wp_query对象,其中包含一系列帖子。让我们说对于给定的类别x有4个帖子。当我var_dump $ wp_query我可以验证

["posts"]=>&array(4)

我可以在转储中看到所有帖子及其数据。

然而,当我循环然后在那个对象上:

<?php  if ( $wp_query->have_posts() ) while ( $wp_query->have_posts() ) : $wp_query->the_post();
  var_dump($post);
endwhile; ?>
我所看到的只有两个帖子。

这怎么可能?

我缺少的循环函数是否有任何配置默认值?

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题:

事实证明,在循环暴露bug之前,标题部分中还有另一个循环。

第一个循环在break条件后立即发出if语句 - 这个想法:找到某个自定义帖子类型的第一个匹配项,然后突破循环。

问题:这个中断没有正确地重置全局post索引变量或者那些行。然后,下一个循环得到一个错误的索引状态,导致它跳转到在前一个循环中已循环的初始帖子。

在休息之前添加rewind_posts()为我解决了这个问题。