我正在尝试使用 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
时确实得到了结果。这里出了什么问题?
请您参考如下方法:
我有根据的猜测是,您的主题中某处有一个编写不当的过滤器正在作用于 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()
检查来仅针对主查询