使用来自 Gatsby 的元查询查询 wordpress

Posted

技术标签:

【中文标题】使用来自 Gatsby 的元查询查询 wordpress【英文标题】:Querying wordpress with meta queries from Gatsby 【发布时间】:2021-10-26 09:19:47 【问题描述】:

我正在尝试使用元查询从我的 Wordpress 后端获取数据。我正在使用这个插件: https://www.wpgraphql.com/extenstion-plugins/wpgraphql-meta-query/

我可以在 Wordpress 的 GraphiQL IDE 中运行我的查询,但不能在 Gatsbys GraphiQL 工具中运行。

我收到此错误: 字段“Query.allWpPage”上的未知参数“where”

查询:

query test 
  allWpPage(
    where: metaQuery: 
      relation: OR,
      metaArray: [
        
          key: "some_value",
          value: null,
          compare: EQUAL_TO
        ,
        key: "some_value",
          value: "536",
          compare: EQUAL_TO
        
      ]
    
  ) 
    edges 
      node 
        id
        uri
      
    
  

我试过删除缓存目录并重建,没有帮助。

澄清一下,我在运行其他查询和获取 ACL 数据方面没有任何问题。我(现在)唯一的问题是将 where 参数暴露给 Gatsby。

【问题讨论】:

【参考方案1】:

where 过滤器在 Gatsby 中受到限制。这里有详细的list of comparators,但它们是:

eq(等于) ne(不等于) in(包括) nin(不包括) ltltegtgte(分别小于、等于或小于、大于、等于或大于) regex, glob(正则表达式) elemMatch(元素匹配)

另一方面,有一个filters available 的列表。在您的情况下,filter 就是您要查找的内容。您的最终查询应如下所示:

query test 
  allWpPage(
   filter : uri : ne : "" 
  ) 
    edges 
      node 
        id
        uri
      
    
  

当然,根据您的需要调整filterelemMatch 应该也适合你。

您需要为要匹配的对象的每个属性添加每个条件。


为什么where 受到限制?

因为它属于 Sift,这是 Gatsby 用来使用 MongoDB queries 的库,其中 where 可用。自 Gatsby 2.23.0(2020 年 6 月)以来,该库不再被使用。更多详情History and Sift:

很长一段时间,Gatsby 都使用 Sift 库,您可以通过它使用 javascript 中的 MongoDB 查询。

不幸的是,Sift 与 Gatsby 的使用方式不一致,因此 编写自定义系统以慢慢替换它。这个系统被称为 “快速过滤器”,从 gatsby@2.23.0(2020 年 6 月)开始,Sift 库是 不再使用。

【讨论】:

感谢您的回答。但是,我要过滤的字段(上面的“some_value”)是“post object”类型的 ACL 字段。该字段未显示在“过滤器”下。它确实显示了我可以选择的字段,因此让该字段显示在 GraphQL 中没有问题。但我无法过滤它。 我会将其设置为已接受的答案,因为它确实回答了我关于如何在 Gatsby 中显示“位置”的原始问题。我会为任何问题制定一个新问题。

以上是关于使用来自 Gatsby 的元查询查询 wordpress的主要内容,如果未能解决你的问题,请参考以下文章