在添加优惠券后,将一种优惠券更换为另一种优惠券

时间:2020-03-14 作者:Brotheryura

我有两张优惠券,一张10美元,另一张5美元。我想做下一步,如果价格低于50美元,客户输入折扣券10美元,则将此优惠券替换为优惠券5美元。

Example:

客户在购物车中添加了一件总价格为40美元的商品,并申请了10美元的折扣券。现在我需要将当前的优惠券换成10美元的折扣,换成另一张5美元的优惠券,然后继续结账。

我能用的最简单的方法是什么?我尝试更改折扣价格,如下面的代码和这项工作,但在其他地方,WC显示我旧优惠券,并计算旧优惠券的所有数据(在订单页等),所以我真的需要REPLACE 添加此优惠券时,将一张优惠券换成另一张(不计算其价格)。就像客户直接在折扣字段中输入5美元折扣券一样

// Change price for discount
if( ! function_exists(\'custom_discount\') ){

  function custom_discount( $price, $values, $instance ) {

    //$price represents the current product price without discount
    //$values represents the product object
    //$instance represent the cart object

    //Get subtotal
    $subtotal = WC()->cart->get_subtotal();
    $coupon = WC()->cart->get_discount_total();

    //if price < 50 and we have active coupon then we need decrease price to $5
    if( $subtotal < 50 && ! empty( WC()->cart->get_applied_coupons() ) ){
      $price = $subtotal  - 5; //Wrong way ...
    }
    return $price;
  }

  add_filter( \'woocommerce_get_discounted_price\', \'custom_discount\', 10, 3);

}

2 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

这需要使用动作挂钩,如woocommerce_calculate_totals 与购物车和Ajax enabled, 因为它将处理客户在购物车页面中所做的所有更改:

add_action( \'woocommerce_calculate_totals\', \'discount_based_on_cart_subtotal\', 10, 1 );
function discount_based_on_cart_subtotal( $cart ) {
    if ( is_admin() && ! defined( \'DOING_AJAX\' ) )
        return;

    // Avoiding hook repetitions
    if ( did_action( \'woocommerce_calculate_totals\' ) >= 2 )
        return;

    // Your coupons settings below
    $coupon_05_off = \'$5-Off\';
    $coupon_10_off = \'$10-Off\';

    // When cart subtotal is below 50
    if ( $cart->subtotal < 50 ) {
        if ( $cart->has_discount( $coupon_10_off ) ) {
            $cart->remove_coupon( $coupon_10_off ); // Remove $10.00 fixed discount coupon
            if ( ! $cart->has_discount( $coupon_05_off ) ) {
                 $cart->apply_coupon( $coupon_05_off ); // Add $5.00 fixed discount coupon
            }
        }

    }
    // When cart subtotal is up to 50
    else {
        if ( $cart->has_discount( $coupon_05_off ) ) {
            $cart->remove_coupon( $coupon_05_off ); // Remove $5.00 fixed discount coupon
            if ( ! $cart->has_discount( $coupon_10_off ) ) {
                $cart->apply_coupon( $coupon_10_off ); // Add $10.00 fixed discount coupon
            }
        }
    }
}
代码进入函数。活动子主题(或活动主题)的php文件。测试和工作。

SO网友:Dragos Micu

我已经对此进行了测试,可以确认它是有效的,即使您将购物车中的产品更改为低于或高于50美元。

<?php
/**
 * @snippet Add / Remove A Coupon Dynamically based on Cart Subtotal with WooCommerce
 * @sourcecode http://wpharvest.com
 * @author Dragos Micu
 * @compatible WooCommerce 2.4.7
 */
add_action( \'woocommerce_calculate_totals\', \'wpharvest_apply_coupons\' );
function wpharvest_apply_coupons($cart) {
    global $woocommerce;
    // Set your coupon codes
    $coupon10off = \'$10-Off\';
    $coupon5off = \'$5-Off\';

    // Get the cart subtotal
    $cart_subtotal = $cart->subtotal;
    // If cart subtotal is less than 50 add or remove coupons
    if ($cart_subtotal < 50) {
        if ( $woocommerce->cart->has_discount( $coupon10off ) ) {
            WC()->cart->remove_coupon( $coupon10off );
            $woocommerce->cart->add_discount( $coupon5off );
        }
    }
    // If cart subtotal is greater 49 add or remove coupons
    if ($cart_subtotal > 49 ) {
        if ( $woocommerce->cart->has_discount( $coupon5off ) ) {
            WC()->cart->remove_coupon( $coupon5off );
            $woocommerce->cart->add_discount( $coupon10off );
        }
    }
}

相关推荐