将 Woocommerce 中的免费送货优惠券的所有送货方式成本设置为零
Set all shipping methods cost to zero for a Free shipping coupon in Woocommerce
我的购物车中有 3 种送货方式,一旦您的客户输入免费送货优惠券,它们就会变成零价格。
我知道如何在 functions.php 中添加一个过滤器来检测优惠券,但是有人知道一个片段可以将此订单的购物车(单选按钮)中可见的送货方式设置为零吗?
我的送货方式是 UPS、FedEx 等公司...
我激活了免费送货选项,以便可以使用优惠券进行管理。
客户选择的送货方式列表是根据我的产品运费class和订单总重量计算的。
运费class不是计算出来的,而是根据产品设置的,我用TABLE RATE PLUGIN来计算重量。
非常感谢
必须使用选项 "A valid free shipping coupon" 启用第一种免费送货方式…
然后您需要设置所需的优惠券代码并启用选项 "Allow free shipping"。
当应用有效的优惠券代码(启用选项 "Allow free shipping")时,以下代码会将所有送货方式的费用设置为 零。
Update: Hide "Free shipping" method and append shipping label titles with "(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 文件。
经过测试并且有效。它应该也适合你。
Sometimes, you should may be need to refresh shipping methods:
1) Empty cart first.
2) Go to shipping Zones settings, then disable/save and re-enable/save the related shipping methods.
如果你想达到同样的效果,但只要有可用的免费送货方式(不仅适用优惠券,而且购物车总数超过一定价格),你可以使用这个:
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 之前,送货方式 "Free Shipping" 的详细信息存储在数组元素 $rates['free_shipping']
下。但是,现在它存储为 $rates['free_shipping:shipping_zone_instance_id']
,其中 shipping_zone_instance_id
是送货方式的送货区域实例 ID。您可以通过检查管理面板中的 "Free Shipping" 或在新选项卡中打开它并查看 url http://prntscr.com/jd2zjy.
来检查运输方式的实例 ID
我的购物车中有 3 种送货方式,一旦您的客户输入免费送货优惠券,它们就会变成零价格。
我知道如何在 functions.php 中添加一个过滤器来检测优惠券,但是有人知道一个片段可以将此订单的购物车(单选按钮)中可见的送货方式设置为零吗?
我的送货方式是 UPS、FedEx 等公司...
我激活了免费送货选项,以便可以使用优惠券进行管理。
客户选择的送货方式列表是根据我的产品运费class和订单总重量计算的。
运费class不是计算出来的,而是根据产品设置的,我用TABLE RATE PLUGIN来计算重量。
非常感谢
必须使用选项 "A valid free shipping coupon" 启用第一种免费送货方式…
然后您需要设置所需的优惠券代码并启用选项 "Allow free shipping"。
当应用有效的优惠券代码(启用选项 "Allow free shipping")时,以下代码会将所有送货方式的费用设置为 零。
Update: Hide "Free shipping" method and append shipping label titles with "
(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 文件。
经过测试并且有效。它应该也适合你。
Sometimes, you should may be need to refresh shipping methods:
1) Empty cart first.
2) Go to shipping Zones settings, then disable/save and re-enable/save the related shipping methods.
如果你想达到同样的效果,但只要有可用的免费送货方式(不仅适用优惠券,而且购物车总数超过一定价格),你可以使用这个:
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 之前,送货方式 "Free Shipping" 的详细信息存储在数组元素 $rates['free_shipping']
下。但是,现在它存储为 $rates['free_shipping:shipping_zone_instance_id']
,其中 shipping_zone_instance_id
是送货方式的送货区域实例 ID。您可以通过检查管理面板中的 "Free Shipping" 或在新选项卡中打开它并查看 url http://prntscr.com/jd2zjy.