使用来自 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
(不包括)
lt
、lte
、gt
、gte
(分别小于、等于或小于、大于、等于或大于)
regex
, glob
(正则表达式)
elemMatch
(元素匹配)
另一方面,有一个filters available 的列表。在您的情况下,filter
就是您要查找的内容。您的最终查询应如下所示:
query test
allWpPage(
filter : uri : ne : ""
)
edges
node
id
uri
当然,根据您的需要调整filter
。 elemMatch
应该也适合你。
您需要为要匹配的对象的每个属性添加每个条件。
为什么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 查询