0

我将 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
        }
      }
    }
  }
}

我知道最好逐页地提取数据。但是收集这么多数据的问题仍然存在。

4

2 回答 2

0

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

于 2021-02-03T09:21:28.257 回答
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中使用此过滤器覆盖数量,否则您不能一次从连接查询中检索超过 100 个结果。

于 2021-02-07T02:45:16.370 回答