提问者:小点点

在WooCommerce中按配送区域添加配送方式


当客户地址位于特定的配送区域时,我想添加一种特定的配送方式。在搜索Stackoverflow时,我发现很多代码片段基于某些条件删除了shipping方法,但没有发现添加shipping方法的代码片段。所需的装运方式存在于选项中,默认情况下禁用,它是ID为7的固定费率。以下是我尝试过的:

add_filter( 'woocommerce_package_rates', 'add_shipping_method_based_on_shipping_zone', 10, 2 );
function add_shipping_method_based_on_shipping_zone( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    
    $shipping_zone = wc_get_shipping_zone( $package );
    $zone_id   = $shipping_zone->get_id();

    if ( $zone_id == 3) {
        // some magic here to add an existing shipping method which was disabled in shipping options
        $rates[] = 'flat_rate:7'; // this does not work, looks like I have to insert all shipping method properties as well
    }
    
    return $rates;

}

区域匹配逻辑按预期工作,但我无法弄清楚如何将现有的运输方法添加到$速率对象。此外,我无法通过woocommerce_package_rates过滤器打印$费率和$包裹内容,尽管它似乎在一段时间前工作。因此,任何建议,我如何可以打印这些对象在购物车页面是欢迎的。


共1个答案

匿名用户

禁用装运方法时,$rates中不存在该方法,因此可以选择启用该方法并使用一些反向逻辑

function filter_woocommerce_package_rates( $rates, $package ) {
    // Shipping zone
    $shipping_zone = wc_get_shipping_zone( $package );
    
    // Get zone ID
    $zone_id = $shipping_zone->get_id();

    // NOT equal
    if ( $zone_id != 3 ) {
        // Unset a single rate/method
        unset( $rates['flat_rate:7'] );
    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'filter_woocommerce_package_rates', 10, 2 );