Bor*_*rje 4 wordpress advanced-custom-fields graphql gatsby
这是后续问题这是关于使用来自 Gatsby 的元查询查询 wordpress 的
经过一番调试后,我收集到了,如果我错了,请纠正我,Gatsby 在构建时会下载整个数据结构并缓存它。因此所有 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 查询使用过滤器参数。
考虑以下查询:
query Test {
allWpPage(filter: {pagesGeo: {}}) {
edges {
node {
pagesGeo {
genericPage {
... on WpPage {
id
}
}
hreflangValue
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在本例中,我想在 genericPage 上进行过滤,但它不在 GraphiQL 查询测试器的可用过滤器列表中。
在 WordPress 中,自定义字段 generic_page 是在高级自定义字段的帮助下定义的,它的字段类型为“Post Object”。正如您所看到的,我能够很好地查询该字段,并且我可以轻松地在 Wordpress 中创建元查询来过滤该字段。它看起来像:
$query_args['meta_query'] = [
"relation" => "OR",
[
'key' => 'generic_page',
'value' => $postObjectId,
'compare' => '='
],
[
'key' => 'generic_page',
'value' => $postObjectId2,
'compare' => '='
],
];
Run Code Online (Sandbox Code Playgroud)
有没有办法让我可以在 Gatsby 中过滤 genericPage?
如果没有,是否有其他解决方案可以帮助我提取所需的数据?
\n\n经过我收集的一些调试后,如果我错了,请纠正我,Gatsby 在构建时会下载整个数据结构并缓存它。因此所有 GraphQL 查询都是针对缓存执行的。
\n
对,那是正确的。
\n我对 Gatsby 或 GraphQL 编码不太了解,但这就是我所做的,而且对我来说效果很好:
\n我使用“WordPress 博客”启动器创建了一个 Gatsby 网站:https://github.com/gatsbyjs/gatsby-starter-wordpress-blog
\n然后在我的 WordPress 网站上,我安装了这些插件:ACF(免费版本,v5.10.2)、WP Gatsby v1.1.3、WP GraphQL v1.6.4、“WPGraphQL for Advanced Custom Fields”v0.5.3 和(仅用于测试) WPGraphQL 元查询 v0.1.0
\n然后我创建了一个名为“Pages GEO”的 ACF字段组:
\n在GraphQL 元框中,我将“在 GraphQL 中显示”设置为“是”,然后将“ GraphQL 字段名称”设置为pagesGeo(这就是您使用的,对吧?)
然后我创建了一个名为“通用页面”( ) 的Post 对象字段generic_page,然后将“在 GraphQL 中显示”设置为“是”
当然,我创建/编辑了一些页面(即帖子类型page),然后为这些页面选择了“通用页面”。
所以关于这一点:
\n\n\n在本例中,我想在 genericPage 上进行过滤,但它不在 GraphiQL 查询测试器的可用过滤器列表中。
\n
我无法添加,但我设法通过执行以下操作按该字段(即 )filter.pagesGeo.genericPage进行过滤:filter.genericPage
genericPage在我的主题中functions.php,我添加了:
add_action( \'graphql_register_types\', function() {\n register_graphql_field( \'Page\', \'genericPage\', [\n \'type\' => \'Integer\',\n \'description\' => \'generic_page meta value\',\n \'resolve\' => function( \\WPGraphQL\\Model\\Post $post ) {\n return (int) get_post_meta( $post->databaseId, \'generic_page\', true );\n }\n ] );\n});\nRun Code Online (Sandbox Code Playgroud)\n然后在 GraphiQL IDE(位于 http://localhost:8000/__graphql)中,我运行了以下查询:
\n\n因此,在上面的查询中,我按元过滤了帖子generic_page,其中查询了元值(即帖子 ID,或databaseId在 GraphQL 中)为2 或 的 82帖子。
我使用了in比较器,但您可以使用适合您的查询的任何其他比较器。请参阅https://www.gatsbyjs.com/docs/query-filters/#supported-comparators
结果是:
\n\ndata.allWpPage.nodes),根genericPage与pagesGeo.genericPage.databaseId.我使用了gatsby develop(如果我没有记错的话)重建缓存的命令,但如果有必要,可以手动清除缓存 \xe2\x80\x94 请参阅https://www.gatsbyjs.com/docs/build-caching/#清除缓存。
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |