我将Wordpress,Woocommerce,WooGraphQL,React和Next用于无头的电子商务解决方案,利用SSG和SSR来实现SEO和性能。
在类别页面上填充产品过滤器时,我担心性能。我只想显示与搜索匹配的产品相关的过滤器。
假设的例子:
在我的情况下,过滤器是产品类别,每个产品都链接到3个类别。
我唯一想到的是请求所有500种产品的数据,然后遍历数组中的每个产品以访问相关类别并填充过滤器。
在我的实际项目中,实际上不会超过100种产品,但理想情况下,我想采用一种可扩展的方法。
是否正在拉动一些我应该关注的数据量,还是我对此考虑过度? (我猜不是)如果没有,哪种方法可以更好地解决此类问题?
示例GraphQL请求如下所示:
query MyQuery {
products(first: 500, where: {search: "something"}) {
nodes {
productCategories {
nodes {
name
}
}
}
}
}
我了解以一页一页的方式提取数据是最好的。但是收集大量数据的问题仍然存在。
答案 0 :(得分:0)
我上周刚好在同一个地方。我的解决方案是创建我知道作为 ACF 列表包含在类别中的过滤器。问题是你必须为每个类别输入你想要的所有过滤器,但它解决了当你只需要 12 个产品时查询数千个产品的问题。它看起来像 wordpress-category-view
答案 1 :(得分:0)
您可以简单地获取结果产品的 databaseId
并将它们用作 $objectIds
就是这个查询
query ($objectIds: [ID] ){
productCategories(where: {objectIds: $objectIds}) {
nodes {
databaseId
name
}
}
}
这应该检索所有连接的类别,然后如果您对初始查询进行一些小的更改,您可以将 databaseId
的 productCategories 选择用于过滤器并将它们存储为 $categories
在重构版本中您的初始查询。
query (search: String, $categories: [Int] ){
products(first: 100, where: {search: $search, categoryIdIn: $categories}) {
nodes {
databaseId
name
}
}
}
两个小注释,除非您在 WPGraphQL 中使用此 filter 覆盖数量,否则您不能从连接查询中一次检索超过 100 个结果。< /p>