我正在尝试使用WP_Query
和一些参数检索wordpress中的一些页面:
$args = array(
'post_type' => 'posttype',
'posts_per_page' => 24,
'post__in' => $store_ids,
'paged' => $paged,
'post_status' => 'publish',
);
$the_query = new WP_Query( $args );
我试图在这里检索的页面应该与我提供的ID数组中的ID匹配。数组和其他参数似乎很好,因为当我使用get_posts
而不是WP_Query
时,我得到了我的结果。这里出了什么问题?
答案 0 :(得分:6)
我有根据的猜测是,你的主题中的某个地方有一个写得不好的过滤器正在WP_Query
上运行,很可能就是行动pre_get_posts
。
get_posts
使用WP_Query
。唯一的区别是get_posts
默认情况下将以下两个参数传递给WP_Query
:
'no_found_rows' => true
“失败”分页,这就是为什么你不能分页get_posts
'suppress_filters' =>true
这是重要的一个,它的作用是阻止过滤器改变查询。因此,pre_get_posts
和posts_*
过滤器中的内置版不能用于更改get_posts
。这就是为什么在您的情况下,您使用get_posts
获取帖子而使用WP_Query
此处的脏修复是将'suppress_filters' => true
添加到WP_Query
中的查询参数中。正确的解决方法是查找更改查询的过滤器。正如我所说,很可能pre_get_posts
你没有使用is_main_query()
检查来定位主查询
答案 1 :(得分:0)
在wp_reset_query()
行之后使用WP_Query
。