WP_Query不返回任何结果

aar*_*oot 2 php wordpress wp-query

我正在尝试使用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 );
Run Code Online (Sandbox Code Playgroud)

我要在此处检索的页面应与我提供的ID数组中的ID相匹配。数组和其他参数看起来不错,因为当我使用get_posts而不是时确实得到了结果WP_Query。这是怎么了?

小智 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()检查仅将主查询作为目标