WooCommerce REST API - 获取所有具有变体的产品,而无需太多请求



我正在使用WooCommerce REST API来获取所有具有变体的产品,但是我遇到了一个相当大的问题,即触发的请求数量。我需要帮助优化下面的情况。

情况: 一个网上商店,有50种产品,每种产品有5种变体。

  1. 获取所有主产品(~1 个请求)
  2. 获取每个产品的所有变体(50 个请求)

请求总数 = 51

如何在不触发 51 个请求的情况下执行此操作?难道不可能以某种方式让所有产品及其变体都渴望加载吗?

是的,您可以通过自定义WooCommerce产品REST API响应来做到这一点。

在这里,我附加了一些可以帮助您的代码。

add_filter('woocommerce_rest_prepare_product_object', 'custom_change_product_response', 20, 3);
add_filter('woocommerce_rest_prepare_product_variation_object', 'custom_change_product_response', 20, 3);
function custom_change_product_response($response, $object, $request) {
$variations = $response->data['variations'];
$variations_res = array();
$variations_array = array();
if (!empty($variations) && is_array($variations)) {
foreach ($variations as $variation) {
$variation_id = $variation;
$variation = new WC_Product_Variation($variation_id);
$variations_res['id'] = $variation_id;
$variations_res['on_sale'] = $variation->is_on_sale();
$variations_res['regular_price'] = (float)$variation->get_regular_price();
$variations_res['sale_price'] = (float)$variation->get_sale_price();
$variations_res['sku'] = $variation->get_sku();
$variations_res['quantity'] = $variation->get_stock_quantity();
if ($variations_res['quantity'] == null) {
$variations_res['quantity'] = '';
}
$variations_res['stock'] = $variation->get_stock_quantity();
$attributes = array();
// variation attributes
foreach ( $variation->get_variation_attributes() as $attribute_name => $attribute ) {
// taxonomy-based attributes are prefixed with `pa_`, otherwise simply `attribute_`
$attributes[] = array(
'name'   => wc_attribute_label( str_replace( 'attribute_', '', $attribute_name ), $variation ),
'slug'   => str_replace( 'attribute_', '', wc_attribute_taxonomy_slug( $attribute_name ) ),
'option' => $attribute,
);
}
$variations_res['attributes'] = $attributes;
$variations_array[] = $variations_res;
}
}
$response->data['product_variations'] = $variations_array;
return $response;
}

我已经这样做了。我已经在单个参数product_variations中获得了所有变体。

不幸的是,如果没有访问服务器,他们的"新"API 就无法做到这一点。因此,为运行WooCommerce的客户开发工具的第三方公司被搞砸了。

必须为每个变体发出请求的问题并不是唯一的问题。计算产品也是不可能的。我们现在必须加载所有产品的数据才能计算它们......

如果客户在他们的商店中有 10,000 种产品,每种产品有 3 种变体,我们必须提出 30K+ 个人请求......(而不是几十个,每页一个)。

就个人而言,由于这是完全不切实际的,并且很可能会使我们被某些防火墙列入黑名单,因此我决定使用旧的API:https://woocommerce.github.io/woocommerce-rest-api-docs/v3.html#view-products-count

而不是"新"的:https://woocommerce.github.io/woocommerce-rest-api-docs/

旧的API什么时候会从WooCommerce中完全删除?我不知道,但无论如何没有其他现实的选择。

您可以在一次请求中获取所有产品变体

GET /products/<product-id>/variations/

然后遍历结果以找到匹配的结果并检索 ID

最新更新