当 Woocommerce 中提供免费送货时,仅禁用统一费率送货方式

Disable only flat rate shipping method when free shipping is available in Woocommerce

我正在使用 lightly changed answer code to hide all shipping methods except one. The only method I want showing is a rate from the "Woocommerce Advanced Shipping" plugin

我使用的是正确的费率 ID 等等...

一切正常,除非当客户尝试单击该送货方式时,它不会停留 selected。它只是跳回免费送货。

我试过调试,也试过使用本地 woocommerce 统一费率 ID 的代码,它显示 up/able 到 select 就好了。

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”(来自插件的自定义运费)

如何在提供免费送货服务时禁用固定费率送货方式并保持自定义运费(通过插件)?

由于您有 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;
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

Refresh the shipping caches:

  1. 此代码已保存在您的 function.php 文件中。
  2. 在配送区域设置中,禁用/保存任何配送方式,然后启用返回/保存。
    大功告成,可以测试了。