如何在 Woocommerce 中逐步增加可变产品的产品数量?

问题描述 投票:0回答:1

我在 woocommerce 中设置了一家商店,要求产品数量以 6 为步长增加。我们使用依赖于每个产品 slug 的代码来设置它。它适用于单一产品,但它适用于可变产品(添加第 7 个项目,然后继续以 6 为步长增加产品数量)。

这是我的代码:

add_filter( 'woocommerce_quantity_input_args', 'quantity_selected_number', 10, 2 );
function quantity_selected_number( $args, $product ) {
//global $product;
   if ( ! is_cart() ) {
 if ($product->get_slug()=="product-01-slug"){
      $args['input_value'] = 6; // Start from this value (default = 1) 
      $args['max_value'] = 600; // Maximum quantity (default = -1)
      $args['min_value'] = 6; // Minimum quantity (default = 0)
      $args['step'] = 6; // Increment or decrement by this value (default = 1)
 }
   } 
 if ($product->get_slug()=="product-02-slug"){
      // Cart's 'min_value' is 0
      $args['input_value'] = 3;
      $args['max_value'] = 260; 
      $args['step'] = 3; 
      $args['min_value'] = 3;
 }
if ($product->get_slug()=="product-03-slug"){
      // Cart's 'min_value' is 0
      $args['input_value'] = 3;
      $args['max_value'] = 260; 
      $args['step'] = 3; 
      $args['min_value'] = 3;
 }
   return $args; 
}

知道为什么会这样以及什么可以使其适用于可变产品吗?

wordpress woocommerce hook-woocommerce
1个回答
0
投票

要处理可变产品的产品变化,您需要一个额外的挂钩函数。

我还添加了另一个函数来处理 Ajax 添加到购物车。

下面我也重新审视了你的代码,因为有一些小错误。

尝试以下方法:

add_filter( 'woocommerce_quantity_input_args', 'quantity_selected_number', 10, 2 );
function quantity_selected_number( $args, $product ) {
    if  ( $product->get_slug() === 'product-01-slug' ) {
        if ( ! is_cart() ) {
            $args['input_value'] = 6; // default: 1 
        }
        $args['min_value'] = 6; // default: 0
        $args['max_value'] = 600; // default: -1
        $args['step'] = 6; // default: 1
    }

    if ( in_array( $product->get_slug(), array('product-02-slug', 'product-03-slug') ) ) {
        if ( ! is_cart() ) {
            $args['input_value'] = 3;
        }
        $args['min_value'] = 3;
        $args['max_value'] = 260; 
        $args['step'] = 3; 
    }

    return $args; 
}

// For Ajax add to cart button (define the Input quantity value)
add_filter( 'woocommerce_loop_add_to_cart_args', 'loop_ajax_add_to_cart_quantity_fix', 10, 2 );
function loop_ajax_add_to_cart_quantity_fix( $args, $product ) {
    if ( $product->get_slug() === 'product-01-slug' ) {
        $args['quantity'] = 6; // default: 1 
    }

    if ( in_array( $product->get_slug(), array('product-02-slug', 'product-03-slug') ) ) {
        $args['quantity'] = 3; 
    }

    return $args;
}

// For product variations (define the min and max values)
add_filter( 'woocommerce_available_variation', 'filter_available_variation_qty', 10, 3 );
function filter_available_variation_qty( $data, $product, $variation ) { 
    if ( $product->get_slug() === 'product-01-slug' ){
        $data['min_qty'] = 6; // default: 0
        $data['max_qty'] = 600; // default: -1
    }

    if ( in_array( $product->get_slug(), array('product-02-slug', 'product-03-slug') ) ) {
        $data['min_qty'] = 3;
        $data['max_qty'] = 260; 
    }

    return $data;
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.