Woocommerce折扣优惠券定制运费

我在过去4个小时内尝试过研究这个问题的答案,但我还没有找到答案 .

我在我的woocommerce结帐页面上添加了自定义费用 . 这是由于woocommerce航运无法提供的复杂的交付计算 .

我现在需要创建一张优惠券,如果输入优惠券,则将此自定义费用设置为零 .

这是我的定制费用

WC()->cart->add_fee( __('Shipping', 'woocommerce'), $shipping_price );

这是我需要实现的目标 .

if($coupon_code == "this-string"){
$shipping_price = 0;
}

我需要一种方法来检查提交的优惠券代码是否等于“this-string”,如果是,我需要将$ shipping Fee设置为零 .

请各位帮助将不胜感激 .

回答(3)

2 years ago

您可以拨打 WC()->cart->get_applied_coupons() 以获取应用于购物车的所有优惠券 . 然后,您可以检查您的优惠券代码是否在该数组中 . 像这样的东西:

if(in_array($coupon_code, WC()->cart->get_applied_coupons())) {
  // Do something
}

2 years ago

未经测试,但我认为你应该在应用代码时做一些事情,所以 woocommerce_applied_coupon 钩子是相关的 .

function so_46429329_applied_coupon( $coupon_code ) {
    if( $coupon_code == "this-string" ){
        $shipping_price = 0;
        WC()->cart->add_fee( __('Shipping', 'woocommerce'), $shipping_price );
    }
}
add_action( 'woocommerce_applied_coupon', 'so_46429329_applied_coupon' );

我没有测试的部分是这是否会覆盖现有的“运费”,或者您是否需要找到一种方法来先删除它 .

2 years ago

以下功能将为您的woo-commerce Cart添加运费,之后会增加结账价格 .

// ADD SHIPPING COST

function woo_add_cart_fee() {

  WC()->cart->add_fee( __('Shipping', 'woocommerce'), 100 );

}

add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );

如果您想将自定义优惠券应用于运费,您可以采取一些措施

// ADD SHIPPING COST

function woo_add_cart_fee() {

   $custom_coupon = $_GET["coupon_name"];

    if ($custom_coupon = 'discount_code_half') {

      WC()->cart->add_fee( __('Shipping', 'woocommerce'), 100 );

    }elseif ($custom_coupon = 'discount_code_more_than_half') {

      WC()->cart->add_fee( __('Shipping', 'woocommerce'), 50 );

    }elseif ($custom_coupon = 'discount_code_free') {

      WC()->cart->add_fee( __('Shipping', 'woocommerce'), 0 );

    }else ( ! $custom_coupon) {

      WC()->cart->add_fee( __('Shipping', 'woocommerce'), 200 );

    }
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );

要使用此方法,您需要使用优惠券按钮将优惠券名称提交到购物车页面 .

从上一页开始,或者您可以将其提交到它所在的同一页面 . 无论哪种方式,您的页面都必须刷新,以便您可以使用

$custom_coupon = $_GET["coupon_name"];

希望这个答案有所帮助:)