我看到一些奇怪的行为,我无法在基于类别的模板循环中解释。
我有一个类别模板的自定义查询过滤器,预先选择要查询的几个自定义帖子类型:
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; ?>
我所看到的只有两个帖子。
这怎么可能?
我缺少的循环函数是否有任何配置默认值?
答案 0 :(得分:0)
我能够解决这个问题:
事实证明,在循环暴露bug之前,标题部分中还有另一个循环。
第一个循环在break
条件后立即发出if
语句 - 这个想法:找到某个自定义帖子类型的第一个匹配项,然后突破循环。
问题:这个中断没有正确地重置全局post索引变量或者那些行。然后,下一个循环得到一个错误的索引状态,导致它跳转到在前一个循环中已循环的初始帖子。
在休息之前添加rewind_posts()
为我解决了这个问题。