php 设置所有运输方式成本为零免费送货优惠券在Woocommerce

tpgth1q7  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(136)

我有3在我的购物车,应成为零价格,只要您的客户输入免费送货券航运方法。
我知道如何在functions.php中添加一个过滤器来检测优惠券,但是有人知道一个代码片段来为这个订单将购物车中的运输方法visibles(单选按钮)设置为零吗?
我的送货方式是UPS联邦快递...
我激活了免费送货选项,以便它可以与优惠券管理.
该清单的选择交货方式的客户是根据我的产品航运类和订单总重量计算。
运输类不计算,但由产品设置,我使用TABLE RATE PLUGIN来计算重量。

9fkzdhlc

9fkzdhlc1#

第一个免费送货方法必须启用选项"有效的免费送货优惠券"...
然后,你需要设置所需的优惠券代码选项"允许免费送货"启用.
下面的代码将设置所有航运方法成本为当一个有效的优惠券代码(与选项"允许免费送货"启用)将适用。

    • 更新:隐藏"免运费"方法,并在运输标签标题后添加"(free)"**
add_filter( 'woocommerce_package_rates', 'coupon_free_shipping_customization', 20, 2 );
function coupon_free_shipping_customization( $rates, $package ) {
    $has_free_shipping = false;

    $applied_coupons = WC()->cart->get_applied_coupons();
    foreach( $applied_coupons as $coupon_code ){
        $coupon = new WC_Coupon($coupon_code);
        if($coupon->get_free_shipping()){
            $has_free_shipping = true;
            break;
        }
    }

    foreach( $rates as $rate_key => $rate ){
        if( $has_free_shipping ){
            // For "free shipping" method (enabled), remove it
            if( $rate->method_id == 'free_shipping'){
                unset($rates[$rate_key]);
            }
            // For other shipping methods
            else {
                // Append rate label titles (free)
                $rates[$rate_key]->label .= ' ' . __('(free)', 'woocommerce');

                // Set rate cost
                $rates[$rate_key]->cost = 0;

                // Set taxes rate cost (if enabled)
                $taxes = array();
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $rates[$rate_key]->taxes[$key] > 0 )
                        $taxes[$key] = 0;
                }
                $rates[$rate_key]->taxes = $taxes;
            }
        }
    }
    return $rates;
}
  • 代码位于当前子主题(或当前主题)的function.php文件中。*

测试过了,很有效,应该对你也有效。
有时,您可能需要刷新发运方式
1)先清空手推车。
2)转到配送区域设置,然后禁用/保存并重新启用/保存相关配送方式。

bf1o4zei

bf1o4zei2#

如果你想实现相同的,但每当有一个免费送货的方法可用(不仅适用优惠券,而且购物车总额高于一定的价格),你可以使用这个:

add_filter( 'woocommerce_package_rates', 'wc_apply_free_shipping_to_all_methods', 10, 2 );
function wc_apply_free_shipping_to_all_methods( $rates, $package ) {
  if( isset( $rates['free_shipping:11'] ) ) { 
    unset( $rates['free_shipping:11'] );
    foreach( $rates as $rate_key => $rate ) { 
                // Append rate label titles (free)
                $rates[$rate_key]->label .= ' ' . __('(free)', 'woocommerce');

                // Set rate cost
                $rates[$rate_key]->cost = 0;

                // Set taxes rate cost (if enabled)
                $taxes = array();
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $rates[$rate_key]->taxes[$key] > 0 )
                        $taxes[$key] = 0;
                }
                $rates[$rate_key]->taxes = $taxes;
    }   
  }
  return $rates;
}

请注意,在free_shipping之后有一个:11。在WooCommerce 2.6之前,送货方式“免费送货”的详细信息存储在数组元素$rates['free_shipping']下。它存储为$rates['free_shipping:shipping_zone_instance_id'],其中shipping_zone_instance_id是发运方法的发运区域示例ID。您可以通过检查“免费发运”来检查发运方法的示例ID在管理面板中,或在新选项卡中打开它并查看url http://prntscr.com/jd2zjy

相关问题