2

我有一个自定义 Wordpress 插件,它搜索自定义类型的所有帖子下载,我需要查询才能找到它们:

  $args = array(
    'post_type' => 'download',
    'post_status' => 'publish',
    'posts_per_page' => 10,
    'suppress_filters' => true,
    'paged' => $request['id'],
    'suppress_filters' => true
  );

$posts = new WP_Query( $args );

不幸的是,当我运行查询时,插件 Easy Digital Downloads 覆盖了我的查询以包含 post__not_in ,其中排除了我实际需要的一些结果:

"post__not_in": [
  "1241",
  "1343",
  "1452",
  "1467",
  "1247"
  ]

我可以看到生成的 SQL 如下所示:

"sql_query": "SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.ID NOT IN (1241,1343,1452,1467,1247) AND wp_posts.post_type = 'download' AND ((wp_posts.post_status = 'publish'))  ORDER BY wp_posts.post_date DESC LIMIT 0, 100"

我尝试停用 EDD,这使我的查询按预期工作,但我认为添加'suppress_filters' => true应该在应用过滤器时撤消,但我一定做错了什么。我还检查了pre_get_postsEDD 生成的(只有一个)并将它们关闭,但这也不起作用。

如何在不排除的情况下获得实际的完整结果?我对想法持开放态度。

4

1 回答 1

0

在我的情况下,我试图绕过由Groups插件(由 itthinx 添加)添加的过滤器,并且'suppress_filters' => true参数 with$posts = new \WP_Query( $args );完成了这项工作。

您也可以尝试使用与 相同(或相似?)参数返回一个简单的帖子数组的get_posts()函数。默认情况下,对于函数,是. 尽管它在内部使用,但它旨在以不与主 WP 查询循环冲突的方式使用。对我来说,无需明确提供.$argsWP_Query()get_posts()suppress_filterstrueWP_Query()get_posts()'suppress_filters' => true

于 2021-12-31T07:51:12.027 回答