免费送货基于 WooCommerce 中的最少购物车商品数量
Free shipping Based on minimal cart items count in WooCommerce
在 Woocommerce 中,我想根据唯一购物车商品的数量提供免费送货服务。首先,我开始查看可用的插件,但找不到任何简单的解决方案。
我想要的是:如果访问者将 4 件不同的商品添加到购物车,则运费将是免费的,但如果例如用户将相同的产品添加 4 次则不是。所以基本上它只适用于 4 个不同的项目(有 4 个不同的 SKU 编号)。
有什么建议吗?
使用WooCommerce - Hide other shipping methods when FREE SHIPPING is available现有的答案代码,您只需计算不同的订单项目:
$items_count = count(WC()->cart->get_cart());
Now, you need to set your free shipping method settings to N/A
(first option);
然后您将能够轻松地按如下方式更改代码以允许免费送货:
add_filter( 'woocommerce_package_rates', 'free_shipping_on_items_count_threshold', 100, 2 );
function free_shipping_on_items_count_threshold( $rates, $package ) {
$items_count = count(WC()->cart->get_cart()); // Different item count
$items_threshold = 4; // Minimal number of items to get free shipping
$free = array(); // Initializing
// Loop through shipping rates
foreach ( $rates as $rate_id => $rate ) {
// Find the free shipping method
if ( 'free_shipping' === $rate->method_id ) {
if( $items_count >= $items_threshold ) {
$free[ $rate_id ] = $rate; // Keep only "free shipping"
} elseif ( $items_count < $items_threshold ) {
unset($rates[$rate_id]); // Remove "Free shipping"
}
break;// stop the loop
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
如果您也想允许优惠券设置免费送货,您必须将免费送货设置更改为“最低订单金额或优惠券" 和 0
最低订购量,请改用以下内容:
add_filter( 'woocommerce_package_rates', 'free_shipping_on_items_count_threshold', 100, 2 );
function free_shipping_on_items_count_threshold( $rates, $package ) {
$items_count = count(WC()->cart->get_cart()); // Different item count
$items_threshold = 4; // Minimal number of items to get free shipping
$coupon_free_ship = false; // Initializing
$free = array(); // Initializing
// Loop through applied coupons
foreach( WC()->cart->get_applied_coupons() as $coupon_code ) {
$coupon = new WC_Coupon( $coupon_code ); // Get the WC_Coupon Object
if ( $coupon->get_free_shipping() ) {
$coupon_free_ship = true;
break;
}
}
// Loop through shipping rates
foreach ( $rates as $rate_id => $rate ) {
// Find the free shipping method
if ( 'free_shipping' === $rate->method_id ) {
if( $items_count >= $items_threshold || $coupon_free_ship ) {
$free[ $rate_id ] = $rate; // Keep only "free shipping"
} elseif ( $items_count < $items_threshold ) {
unset($rates[$rate_id]); // Remove "Free shipping"
}
break;// stop the loop
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
Refresh the shipping caches:
- 此代码已保存在您的 function.php 文件中。
- 在配送区域设置中,禁用/保存任何配送方式,然后启用返回/保存。
大功告成,可以测试了。
在 Woocommerce 中,我想根据唯一购物车商品的数量提供免费送货服务。首先,我开始查看可用的插件,但找不到任何简单的解决方案。
我想要的是:如果访问者将 4 件不同的商品添加到购物车,则运费将是免费的,但如果例如用户将相同的产品添加 4 次则不是。所以基本上它只适用于 4 个不同的项目(有 4 个不同的 SKU 编号)。
有什么建议吗?
使用WooCommerce - Hide other shipping methods when FREE SHIPPING is available现有的答案代码,您只需计算不同的订单项目:
$items_count = count(WC()->cart->get_cart());
Now, you need to set your free shipping method settings to
N/A
(first option);
然后您将能够轻松地按如下方式更改代码以允许免费送货:
add_filter( 'woocommerce_package_rates', 'free_shipping_on_items_count_threshold', 100, 2 );
function free_shipping_on_items_count_threshold( $rates, $package ) {
$items_count = count(WC()->cart->get_cart()); // Different item count
$items_threshold = 4; // Minimal number of items to get free shipping
$free = array(); // Initializing
// Loop through shipping rates
foreach ( $rates as $rate_id => $rate ) {
// Find the free shipping method
if ( 'free_shipping' === $rate->method_id ) {
if( $items_count >= $items_threshold ) {
$free[ $rate_id ] = $rate; // Keep only "free shipping"
} elseif ( $items_count < $items_threshold ) {
unset($rates[$rate_id]); // Remove "Free shipping"
}
break;// stop the loop
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
如果您也想允许优惠券设置免费送货,您必须将免费送货设置更改为“最低订单金额或优惠券" 和 0
最低订购量,请改用以下内容:
add_filter( 'woocommerce_package_rates', 'free_shipping_on_items_count_threshold', 100, 2 );
function free_shipping_on_items_count_threshold( $rates, $package ) {
$items_count = count(WC()->cart->get_cart()); // Different item count
$items_threshold = 4; // Minimal number of items to get free shipping
$coupon_free_ship = false; // Initializing
$free = array(); // Initializing
// Loop through applied coupons
foreach( WC()->cart->get_applied_coupons() as $coupon_code ) {
$coupon = new WC_Coupon( $coupon_code ); // Get the WC_Coupon Object
if ( $coupon->get_free_shipping() ) {
$coupon_free_ship = true;
break;
}
}
// Loop through shipping rates
foreach ( $rates as $rate_id => $rate ) {
// Find the free shipping method
if ( 'free_shipping' === $rate->method_id ) {
if( $items_count >= $items_threshold || $coupon_free_ship ) {
$free[ $rate_id ] = $rate; // Keep only "free shipping"
} elseif ( $items_count < $items_threshold ) {
unset($rates[$rate_id]); // Remove "Free shipping"
}
break;// stop the loop
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
Refresh the shipping caches:
- 此代码已保存在您的 function.php 文件中。
- 在配送区域设置中,禁用/保存任何配送方式,然后启用返回/保存。
大功告成,可以测试了。