使用GraphQL有效地获取与产品相关的产品类别适用于Wordpress的WPGraphQL

问题描述

我将wordpress,Woocommerce,WooGraphQL,React和Next用于无头的电子商务解决方案,利用SSG和SSR来实现SEO性能

在类别页面上填充产品过滤器时,我担心性能。我只想显示搜索匹配的产品相关的过滤器。

假设的例子:

  • 产品搜索产生500个结果。
  • 使用GraphQL请求前12种产品的数据以显示在第一页上。
  • (问题)获取数据以填充所有500种产品的过滤器。

在我的情况下,过滤器是产品类别,每个产品都链接到3个类别。

我唯一想到的是请求所有500种产品的数据,然后遍历数组中的每个产品以访问相关类别并填充过滤器。

在我的实际项目中,实际上不会超过100种产品,但理想情况下,我想采用一种可扩展的方法

是否正在拉动一些我应该关注的数据量,还是我对此考虑过度? (我猜不是)如果没有,哪种方法可以更好地解决此类问题?

示例GraphQL请求如下所示:

query MyQuery {
  products(first: 500,where: {search: "something"}) {
    nodes {
      productCategories {
        nodes {
          name
        }
      }
    }
  }
}

我了解以一页一页的方式提取数据是最好的。但是收集大量数据的问题仍然存在。

解决方法

我上周刚好在同一个地方。我的解决方案是创建我知道作为 ACF 列表包含在类别中的过滤器。问题是你必须为每个类别输入你想要的所有过滤器,但它解决了当你只需要 12 个产品时查询数千个产品的问题。它看起来像 wordpress-category-view

,

您可以简单地获取结果产品的 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 个结果。