在WooCommerce中按运输区域添加运输方式



当客户地址位于特定配送区域内时,我想添加特定的配送方式。在搜索 Stackoverflow 时,我发现很多片段根据某些标准删除了运输方式,但我发现没有添加运输方式。 选项中存在所需的运输方式,默认情况下处于禁用状态,它是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;
}

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

当一种运输方式被禁用时,它不会出现在$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 );

最新更新