当客户地址位于特定的配送区域时,我想添加一种特定的配送方式。在搜索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过滤器打印$费率和$包裹内容,尽管它似乎在一段时间前工作。因此,任何建议,我如何可以打印这些对象在购物车页面是欢迎的。
禁用装运方法时,$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 );