Php 在Woocommerce中将所有配送方式成本设置为零,即可获得免费配送优惠券

Php 在Woocommerce中将所有配送方式成本设置为零,即可获得免费配送优惠券,php,wordpress,woocommerce,shipping,coupon,Php,Wordpress,Woocommerce,Shipping,Coupon,我的购物车中有3种配送方式,当您的客户输入免费配送优惠券时,这些方式应立即成为零价格 我知道如何在functions.php中添加一个过滤器来检测优惠券,但是有人知道一个片段,可以将购物车中的shipping methods visibles(单选按钮)设置为零吗 我的送货方式是UPS、联邦快递 我激活了免费送货选项,以便可以使用优惠券进行管理 根据我的产品装运类别和订单总重量计算客户选择的交货方式列表 装运等级不计算,但由产品设置,我用它来计算重量 非常感谢第一个免费送货方式必须启用选项“有效

我的购物车中有3种配送方式,当您的客户输入免费配送优惠券时,这些方式应立即成为零价格

我知道如何在functions.php中添加一个过滤器来检测优惠券,但是有人知道一个片段,可以将购物车中的shipping methods visibles(单选按钮)设置为零吗

我的送货方式是UPS、联邦快递

我激活了免费送货选项,以便可以使用优惠券进行管理

根据我的产品装运类别和订单总重量计算客户选择的交货方式列表

装运等级不计算,但由产品设置,我用它来计算重量


非常感谢

第一个免费送货方式必须启用选项“有效的免费送货优惠券”

然后,您需要在启用“允许免费送货”选项的情况下设置所需的优惠券代码

当应用有效的优惠券代码(启用“允许免费配送”选项)时,以下代码将所有配送方式成本设置为

更新:隐藏“免费配送”方法,并在配送标签标题后附加
(免费)

代码进入活动子主题(或活动主题)的function.php文件

测试和工作。它应该也适用于你

有时,您可能需要刷新配送方法:
1) 先清空购物车。
2) 转到配送区域设置,然后禁用/保存并重新启用/保存相关配送方法


如果您希望实现同样的目标,但只要有免费送货方式可用(不仅适用于优惠券,而且购物车总额高于特定价格),您可以使用以下方法:

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;
}

请注意,在
免费送货之后有一个
:11
。在WooCommerce 2.6之前,装运方法“免费装运”的详细信息存储在数组元素
$rates['Free\u shipping']
下。但是,现在它存储为
$rates['free\u shipping:shipping\u zone\u instance\u id']
其中
shipping\u zone\u instance\u id
是shipping方法的shipping zone实例id。您可以通过检查管理面板中的“免费配送”来检查配送方式的实例id,或者在新选项卡中打开它并查看url。

谢谢,但我希望的恰恰相反……如果我的优惠券启用免费配送方式,我不能让客户选择取消配送方式……当配送方式显示在购物车中时,邀请客户选择一个单选按钮,我需要设置他们的所有价格为0,如果优惠券是免费的applied@Pipoo代码已测试并更新…保存此代码后,请刷新发送方法,如结尾所述…这不是感谢代码片段的方式…您的答案没有回答此处的初始问题,应该删除。它严格基于我的代码,没有优惠券部分,这是在这个问题中提出的。这实在不公平。你应该问一个新问题…@LoicTheAztec,我原以为有人会喜欢更普遍的解决方案。这不是很明显是你的代码,但经过了调整吗?你想让我在回答中给你加上标签吗?我真的不是对你的不尊重,你在这里的一个被删除的回答中问到:“谢谢你这个很酷的片段!你能告诉我如何编辑这个代码来处理高于特定购物车总价的免费送货吗?”所以这是回答你的问题…但它并没有回答这个帖子中提出的问题…
if(isset($rates['free\u shipping:11')){unset($rates['free_shipping:11']);
不是通用的,它与您的特定问题有关…
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;
}