2016-11-15 46 views
0

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

我对类模板的自定义查询过滤器,预选了几个自定义文章类型来查询:

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

你可以发布整个文件的上下文吗?你将什么分配查询? wp_query? – Wold

回答

0

我能够解决错误:

事实证明,有标头中的环路暴露错误之前另一个循环部分。

第一个循环在if条件之后有一个break语句 - 思路:找到某个自定义帖子类型的第一个出现,然后跳出循环。

问题:此中断没有正确地重置全局后期索引变量或沿着这些行的内容。下一个循环会得到错误的索引状态,导致它跳过上一个循环中循环的初始文章。

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