在 Woocommerce 中自动为一种运输方式应用优惠券

Apply coupon automatically for one shipping method in Woocommerce

在 Woocommerce 上,我正在尝试根据特定的送货方式应用优惠券。

设置了两种送货方式:

  1. 免运费(3 天):0.00 英镑
  2. DPD 次日:4.00 英镑

如果客户选择 DPD Next Day:4.00 英镑送货方式,则应自动应用特定的优惠券代码 "discount4"。

如果客户选择免费送货(3 天):0.00 英镑送货方式,则不应使用优惠券代码。

感谢任何帮助或跟踪。

如果选择的送货方式不是 "Free shipping",以下代码将自动应用优惠券,如果已应用且客户更改为 "Free shipping":

,则将删除该优惠券
// Add / remove coupon based on cosen shipping
add_action( 'woocommerce_before_calculate_totals', 'adding_removing_coupon_shipping_based' );
function adding_removing_coupon_shipping_based( $cart ) {
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE the specific coupon code
    $coupon_code = 'discount4';

    $coupon_code     = wc_format_coupon_code( $coupon_code );
    $chosen_shipping = WC()->session->get('chosen_shipping_methods')[0];
    $applied_coupons = $cart->get_applied_coupons();

    $is_free = strpos( $chosen_shipping, 'free_shipping' ) !== false;
    $is_applied = in_array( $coupon_code, $applied_coupons );


    if ( $is_applied && $is_free )
        $cart->remove_coupon( $coupon_code );
    elseif ( ! $is_applied && ! $is_free )
        $cart->apply_coupon( $coupon_code );
}

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

If you have multiple shipping methods, you should give in your question the correct shipping method rate ID like "flat_rate:18" for DPD Next Day: £4.00, to be targeted in the code instead of free shipping which always start by free_shipping