WooCommerce - 根据购物车小计隐藏/显示运输方式
WooCommerce - hide / show shipping methods based on cart subtotal
在我的 WooCommerce 商店 (使用版本 4.2.2),我想隐藏/显示一些基于购物车小计的送货方式,如下所示:
- 低于 25 欧元:仅显示送货方式 A 和 B,
- 25 至 49 欧元:仅显示送货方式 C 和 D,
- 50 欧元或以上:仅显示免费送货
注意运输方式 A、B、C 和 D 都是“统一费率”。
我用谷歌搜索了这个并设法通过尝试以下代码得到这个(我只是用一种速率和一种阈值进行测试):
add_filter( 'woocommerce_package_rates', 'hide_shipping', 10, 2 );
function hide_shipping( $rates, $package ) {
// Retrieve cart subtotal
global $woocommerce;
$cart_subtotal = $woocommerce->cart->get_subtotal();
if( $cart_subtotal > 25 ){
unset( $rates['flat_rate:7'] );
}
return $rates;
}
但是代码没有效果。我哪里错了?
尝试以下(在开头的代码中设置您的 5 种送货方式费率 ID)。同样对于您的“免费送货”率,将“最低订单金额”设置为 0
(零).
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method', 10, 2 );
function hide_specific_shipping_method( $rates, $package ) {
// Settings: define you shipping rate IDs below
$rate_id_1 = 'flat_rate:7';
$rate_id_2 = 'flat_rate:11';
$rate_id_3 = 'flat_rate:12';
$rate_id_4 = 'flat_rate:15';
$rate_free = 'free_shipping:5';
$cart_subtotal = WC()->cart->get_subtotal();
if ( $cart_subtotal < 25 ) {
// Enable only methods 1 et 2
if ( isset($rates[$rate_id_3]) )
unset( $rates[$rate_id_3] );
if ( isset($rates[$rate_id_4]) )
unset( $rates[$rate_id_4] );
if ( isset($rates[$rate_free]) )
unset( $rates[$rate_free] );
}
elseif ( $cart_subtotal >= 25 && $cart_subtotal < 50 ) {
// Enable only methods 3 et 4
if ( isset($rates[$rate_id_1]) )
unset( $rates[$rate_id_1] );
if ( isset($rates[$rate_id_2]) )
unset( $rates[$rate_id_2] );
if ( isset($rates[$rate_free]) )
unset( $rates[$rate_free] );
}
else {
// Enable only Free shipping
if ( isset($rates[$rate_id_1]) )
unset( $rates[$rate_id_1] );
if ( isset($rates[$rate_id_2]) )
unset( $rates[$rate_id_2] );
if ( isset($rates[$rate_id_3]) )
unset( $rates[$rate_id_3] );
if ( isset($rates[$rate_id_4]) )
unset( $rates[$rate_id_4] );
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
IMPORTANT: Refresh the shipping caches:
1). This code is already saved on your function.php file.
2). In a shipping zone settings, disable / save any shipping method, then enable back / save.
You are done and you can test it.
在我的 WooCommerce 商店 (使用版本 4.2.2),我想隐藏/显示一些基于购物车小计的送货方式,如下所示:
- 低于 25 欧元:仅显示送货方式 A 和 B,
- 25 至 49 欧元:仅显示送货方式 C 和 D,
- 50 欧元或以上:仅显示免费送货
注意运输方式 A、B、C 和 D 都是“统一费率”。
我用谷歌搜索了这个并设法通过尝试以下代码得到这个(我只是用一种速率和一种阈值进行测试):
add_filter( 'woocommerce_package_rates', 'hide_shipping', 10, 2 );
function hide_shipping( $rates, $package ) {
// Retrieve cart subtotal
global $woocommerce;
$cart_subtotal = $woocommerce->cart->get_subtotal();
if( $cart_subtotal > 25 ){
unset( $rates['flat_rate:7'] );
}
return $rates;
}
但是代码没有效果。我哪里错了?
尝试以下(在开头的代码中设置您的 5 种送货方式费率 ID)。同样对于您的“免费送货”率,将“最低订单金额”设置为 0
(零).
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method', 10, 2 );
function hide_specific_shipping_method( $rates, $package ) {
// Settings: define you shipping rate IDs below
$rate_id_1 = 'flat_rate:7';
$rate_id_2 = 'flat_rate:11';
$rate_id_3 = 'flat_rate:12';
$rate_id_4 = 'flat_rate:15';
$rate_free = 'free_shipping:5';
$cart_subtotal = WC()->cart->get_subtotal();
if ( $cart_subtotal < 25 ) {
// Enable only methods 1 et 2
if ( isset($rates[$rate_id_3]) )
unset( $rates[$rate_id_3] );
if ( isset($rates[$rate_id_4]) )
unset( $rates[$rate_id_4] );
if ( isset($rates[$rate_free]) )
unset( $rates[$rate_free] );
}
elseif ( $cart_subtotal >= 25 && $cart_subtotal < 50 ) {
// Enable only methods 3 et 4
if ( isset($rates[$rate_id_1]) )
unset( $rates[$rate_id_1] );
if ( isset($rates[$rate_id_2]) )
unset( $rates[$rate_id_2] );
if ( isset($rates[$rate_free]) )
unset( $rates[$rate_free] );
}
else {
// Enable only Free shipping
if ( isset($rates[$rate_id_1]) )
unset( $rates[$rate_id_1] );
if ( isset($rates[$rate_id_2]) )
unset( $rates[$rate_id_2] );
if ( isset($rates[$rate_id_3]) )
unset( $rates[$rate_id_3] );
if ( isset($rates[$rate_id_4]) )
unset( $rates[$rate_id_4] );
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
IMPORTANT: Refresh the shipping caches:
1). This code is already saved on your function.php file.
2). In a shipping zone settings, disable / save any shipping method, then enable back / save.
You are done and you can test it.