我使用WooCommerce REST API来例如得到所有具有变化的产品,但是我遇到了一个关于已解雇请求数量的相当大的问题。我需要帮助优化下面的情况。
情况: 一个网上商店,每种产品有50种产品和5种不同的产品。
请求总数= 51
如果不触发51个请求,我怎么能这样做?是否有可能以某种方式急切加载所有变化的产品?
答案 0 :(得分:2)
不幸的是,如果没有访问服务器,他们的“新” API便无法做到这一点。因此,为运行WooCommerce的客户开发工具的第三方公司陷入了困境。
每个变体都必须发出请求的问题并不是唯一的问题。计数产品也是不可能的。现在,我们必须加载所有产品的数据以对其进行计数...
如果客户的商店中有10,000种产品,每种产品有3种版本,我们必须提出3万多个个人请求...(而不是几十个,每页一个)。
就个人而言,这是完全不切实际的,并且很可能使我们被某些防火墙列入黑名单,因此我决定使用旧的API:https://woocommerce.github.io/woocommerce-rest-api-docs/v3.html#view-products-count
代替“新的”:https://woocommerce.github.io/woocommerce-rest-api-docs/
何时将旧的API从WooCommerce中完全删除?我不知道,但是还是没有其他现实的选择。
答案 1 :(得分:1)
是的,您可以通过自定义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();
$var = array();
if ( ! empty( $variations ) && is_array( $variations ) ) {
foreach ( $variations as $variation ) {
$variation_id = $variation;
$variation = new WC_Product_Variation( $variation_id );
$variation_attributes = $variation->get_variation_attributes();
$variations_res['variation_id'] = $variation_id;
$variations_res['on_sale'] = $variation->is_on_sale();
$variations_res['regular_price'] = (float) $variation->regular_price;
$variations_res['sale_price'] = (float) $variation->sale_price;
$variations_res['currency'] = get_woocommerce_currency_symbol();
$variations_res['sku'] = $variation->get_sku();
$variations_res['description'] = $variation->get_description();
$variations_res['quantity'] = $variation->get_stock_quantity();
if ( $variations_res['quantity'] == null ) {
$variations_res['quantity'] = '';
}
$variations_res['in_stock'] = $variation->is_in_stock();
$featured_image = wp_get_attachment_image_src( get_post_thumbnail_id( $variation_id ), 'shop_catalog' );
$variations_res['variation_image'] = $featured_image[0];
if ( $variations_res['variation_image'] == null ) {
$variations_res['variation_image'] = " ";
}
foreach ( $variation_attributes as $key => $value ) {
if ( $key == 'attribute_pa_color' ) {
$variation_attributes[ $key ] = get_color_code_by_name( $value );
}
}
$variations_res['variation_attributes'] = $variation_attributes;
$variations_array[] = $variations_res;
}
}
$response['product_variations'] = $variations_array;
}
return $response;
}
我这样做了。我已经获得了单个参数product_variations
的所有变体。
答案 2 :(得分:0)
您可以在1个请求中全部获得产品变体
GET /products/<product-id>/variations/
然后遍历结果以找到匹配的结果并检索ID