我正在使用Hide specifics Flat Rates when Free Shipping is available in WooCommerce 3稍作更改的答案代码来隐藏除一种以外的所有送货方式。我要显示的唯一方法是使用"Woocommerce Advanced Shipping" plugin中的费率。
我使用的是正确的费率ID等...
一切正常,除非客户尝试单击该送货方式,否则它不会保持选中状态。它只是跳回免费送货。
我尝试调试,还尝试了带有本地woocommerce统一费率ID的代码,它显示/可以选择它。
add_filter( 'woocommerce_package_rates', 'conditionally_hide_shipping_methods', 100, 2 );
function conditionally_hide_shipping_methods( $rates, $package ) {
$flat_rates_express = array( '2588' );
$free = $flat2 = array();
foreach ( $rates as $rate_key => $rate ) {
// Updated Here To
if ( in_array( $rate->id, $flat_rates_express ) )
$flat2[ $rate_key ] = $rate;
if ( 'free_shipping:12' === $rate->id )
$free[ $rate_key ] = $rate;
}
return ! empty( $free ) ? array_merge( $free, $flat2 ) : $rates;
}
我要保留的ID:“ 2588”(来自插件的自定义运费)
当免费送货可用时如何禁用统一费率送货方式并保持自定义运费(通过插件)?
答案 0 :(得分:1)
由于您有3种送货方式,1种免费送货,1种统一费率和1种自定义“ 2588”,因此可以在免费送货时隐藏统一费率的送货方式:
add_filter( 'woocommerce_package_rates', 'free_shipping_disable_flat_rate', 1000, 2 );
function free_shipping_disable_flat_rate( $rates, $package ) {
// Here your free shipping rate Id
$free_shipping_rate_id = 'free_shipping:12';
// When your Free shipping method is available
if ( array_key_exists( $free_shipping_rate_id, $rates ) ) {
// Loop through shipping methods rates
foreach ( $rates as $rate_key => $rate ) {
// Removing "Flat rate" shipping method
if ( 'flat_rate' === $rate->method_id ){
unset($rates[$rate_key]);
}
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
刷新运输缓存:
1)此代码已经保存在您的function.php文件中。
2)在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。
您已完成,您可以对其进行测试。