当免费送货可用时,在WooCommerce中隐藏除本地提货之外的其他送货方式

时间:2019-05-19 作者:Anake.me

我目前有WooCommerce设置,允许对超过一定金额的订单进行免费发货。然而,我也有当地皮卡可用,如果超过一定数量,我希望两者都允许。

我有以下代码来删除其他费率,但它也不保留本地取货选项。

function fd_shipping_rates( $rates, $package ) {
     
    $all_free_rates = array();
    
    foreach ( $rates as $rate_id => $rate ) {
        if ( \'free_shipping\' === $rate->method_id ) {
             $all_free_rates[ $rate_id ] = $rate;
            break;
        }
    }
    
    if ( empty( $all_free_rates )) {
        return $rates;
    } else {
        return $all_free_rates;
    } 
}
add_filter( \'woocommerce_package_rates\', \'fd_shipping_rates\', 10, 2 );
非常感谢您的帮助!我在寻找一个代码解决方案,因为我希望尽量减少不必要的插件。

编辑:我最近在WooCommerce Docs 有关此确切问题的网站。

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

当“免费配送”配送方式可用时,以下代码将禁用除“本地提货”以外的其他配送方式。

Required: 免费送货方式需要设置为最小订单金额。

add_filter( \'woocommerce_package_rates\', \'show_hide_shipping_methods\', 100 );
function show_hide_shipping_methods( $rates ) {
    $free_rate_id    = \'\';
    $other_rates_ids = [];

    // Loop through available shipping rates
    foreach ( $rates as $rate_id => $rate ) {
        if ( \'free_shipping\' === $rate->method_id ) {
            $free_rate_id = $rate_id; // grab "Free shipping" rate ID
        }

        // Get all other rates Ids (excluding "Free shipping" and "Local pickup" methods)
        if ( ! in_array( $rate->method_id, [\'free_shipping\', \'local_pickup\'] ) ) {
            $other_rates_ids[] = $rate_id; 
        }
    }

    // Disable All other rates Ids when "Free shipping" is available (excl. "Local pickup")
    if ( ! empty($free_rate_id) && isset($rates[$free_rate_id]) && sizeof($other_rates_ids) > 0 ) {
        foreach ( $other_rates_ids as $rate_id ) {
            unset($rates[$rate_id]);
        }
    }
    return $rates;
}
代码进入函数。活动子主题(或活动主题)的php文件。测试和工作。

Refresh the shipping caches: (必需)

此代码已保存在活动主题的函数中。php文件

  • 购物车是空的,在配送区设置中,禁用/保存任何配送方式,然后启用后退/保存
  • 相关推荐