使用来自 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的主要内容,如果未能解决你的问题,请参考以下文章

来自 markdown 帖子的 Gatsby 图像未从 graphql 查询中显示

Gatsby 中单个 JSON 对象的 GraphQL 查询

gatsby graphql 无法在“Query”类型上查询字段“allTribeEvents”

单个 GraphQL 查询中的多个源 (Gatsby)

来自 json 的 Gatsby 图像路径

来自 Gatsby 中单个对象 JSON 文件的 GraphQL 模式