【发布时间】:2023-03-09 11:10:01
【问题描述】:
这是Querying wordpress with meta queries from Gatsby的后续问题
经过一些调试,我收集到,如果我错了,请纠正我,Gatsby on build 下载整个数据结构并缓存它。所以所有的 GraphQL 查询都是针对缓存执行的。这使得我尝试对 wordpress 进行的所有调整(例如 https://www.wpgraphql.com/2020/04/14/query-posts-based-on-advanced-custom-field-values-by-registering-a-custom-where-argument/)都毫无用处。我仅限于在 Gatsby 中对我的 GraphQL 查询使用 filter 参数。
考虑以下查询:
query Test {
allWpPage(filter: {pagesGeo: {}}) {
edges {
node {
pagesGeo {
genericPage {
... on WpPage {
id
}
}
hreflangValue
}
}
}
}
}
在这种情况下,我想过滤 genericPage,但它不在 GraphiQL 查询测试器的可用过滤器列表中。
在 Wordpress 中,自定义字段 generic_page 是在高级自定义字段的帮助下定义的,它的字段类型为“发布对象”。如您所见,我可以很好地查询该字段,并且我可以很容易地在 Wordpress 中创建一个元查询来过滤该字段。它看起来像:
$query_args['meta_query'] = [
"relation" => "OR",
[
'key' => 'generic_page',
'value' => $postObjectId,
'compare' => '='
],
[
'key' => 'generic_page',
'value' => $postObjectId2,
'compare' => '='
],
];
有没有办法让我在 Gatsby 中的 genericPage 上进行过滤?
如果没有,是否有其他解决方案可供我提取我需要的数据?
【问题讨论】:
-
由于您将 ACF 用于字段,因此您将需要这个 - wpgraphql.com/acf。另外请注意,在编辑自定义字段时,不要忘记在 ACF 页面的最底部检查 Show in GraphQL。阅读本文了解更多信息 - stackoverflow.com/questions/63647590/…
-
@MartinMirchev 感谢您的回答。我有插件,该字段显示在 GraphQL 中。从我的架构中可以看出,GenericPage 字段是可以选择的。但是,我无法对其进行过滤。可能是它没有被视为一个节点?
-
我认为你必须先注册参数。 wpgraphql.com/2020/04/14/…
-
@MartinMirchev 如果您查看我的链接问题,您会发现 Gatsby 中限制了“where”过滤器。但是,据我所知,Gatsby 会在构建期间下载所有数据,然后在该缓存上运行 GraphQL 查询。因此,如果我在 Wordpress 中注册一个新的 where 参数,则不会影响 Gatsby 中的查询。如果你已经能够做到这一点,请提供一个代码示例,以便我可以尝试和模仿它。
标签: wordpress graphql gatsby advanced-custom-fields