根据 Woocommerce 中的产品类别提供 2 种不同百分比折扣的优惠券

Coupon with 2 different percentage discounts based on product category in Woocommerce

我正在寻找一个 Woocommerce 挂钩,它有助于在应用特定优惠券时根据 2 个不同的产品类别限制更改折扣百分比。

例如,如果客户添加特定的优惠券,我会喜欢:

  1. 如果购物车中的商品来自产品类别 A,那么它将为该商品提供 10% 的折扣。
  2. 如果它在产品类别 B 中,它将为该商品提供 20% 的折扣
  3. 更新购物车总价

是否有任何钩子可以实现这一点?任何可用的操作挂钩或过滤器挂钩?

到目前为止,这是我的代码:

add_filter( 'woocommerce_get_discounted_price', 'apply_coupon', 10);
function apply_coupon($price) {
     global $woocommerce;
     $product=$woocommerce->cart->product;
     if(has_term( 'duplex-blinds', 'A' ,$product->id)){
       get_product_cart_price; 
      10% DISCOUNT
     }
     if(has_term( 'duplex-blinds', 'A' ,$product->id)){
      20% DISCOUNT
     }
     upadte total_discunt_incart($new_discount);
     upadte new_price_in_cart($new_price);
     upadte new_price_in_checkout($new_price);
  return $price;
}

重要的是我需要修改总购物车价格总结账价格总折扣价格 和折扣价需要发送到 Paypal。

我的商店有很多挂钩,这就是 woo commerce 默认优惠券计算出错的原因。我注意到购物车页面中的折扣价格是根据自定义产品价值正确计算出来的,但它没有从原始购物车数量中更新,所以总价保持不变。

但是结账页面的折扣价格是根据产品原价计算的,而不是产品定制价格,所以折扣是错误的,而且它也没有从总价中最小化...

以下是一种完全不同的实现方式...此答案代码将根据 2 个特定产品类别启用具有 2 个不同折扣百分比的优惠券代码。

例如,您的相关产品类别是:

  • 对于 10% 的优惠券折扣,产品类别 slug 将为 'hoodies'
  • 对于 20% 的优惠券折扣,产品类别 slug 将为 't-shirts'

(您可以在代码中使用产品类别 ID、别名或名称)

这将需要 2 个步骤:

  1. 优惠券设置(正确设置您的优惠券代码):
    • 折扣类型:Percentage
    • 数量:10
    • 限制 > 产品类别 (显示名称):"Hoodies" 和 "T shirts"
    • 如果需要,您可以进行其他设置
  2. 代码函数里面的设置:
    • 优惠券代码:将您的优惠券代码设置为小写
    • 't-shirts' 产品类别 slug (20% 折扣).

下面是代码(您将在其中添加设置):

add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 20, 5 );
function alter_shop_coupon_data( $round, $discounting_amount, $cart_item, $single, $coupon ){

    ## ---- Your settings ---- ##

    // Related coupons codes to be defined in this array (you can set many)
    $coupon_codes = array('10percent');

    // Product categories at 20% (IDs, Slugs or Names)  for 20% of discount
    $product_category20 = array('hoodies'); // for 20% discount

    $second_percentage = 0.2; // 20 %

    ## ---- The code: Changing the percentage to 20% for specific a product category ---- ##

    if ( $coupon->is_type('percent') && in_array( $coupon->get_code(), $coupon_codes ) ) {
        if( has_term( $product_category20, 'product_cat', $cart_item['product_id'] ) ){
            $original_coupon_amount = (float) $coupon->get_amount();
            $discount = $original_coupon_amount * $second_percentage * $discounting_amount;
            $round = round( min( $discount, $discounting_amount ), wc_get_rounding_precision() );
        }
    }
    return $round;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。


这是一个真实的工作示例(带屏幕截图):

  • 第一个购物车商品(来自 'hoodies' 产品类别)获得 10% 的折扣 x 10% =
  • 第二个购物车商品(来自 't-shirts' 产品类别)获得 20% 的折扣 x 20% =

所以总折扣是 + = …行得通!

我使用此代码,但它在 20% 类别中给出 100%,但如果将 0.2 更改为 0.02,您提供的代码确实有效

$second_percentage = 0.2; // 20 %

也改变了: $second_percentage = 0.02; // 20 %

或: $second_percentage = 0.015; // 15 % 如果您需要15%的折扣