我正在管理一个使用 Woocommerce 的 WP 网站。结账时,有一个 3 天空运方式选项,目前仅向居住在美国 2 个特定州的客户显示。运输方式是 UPS 的实时费率,并通过 UPS API 获取。 (该 API 通过 PluginHive UPS Shipping & Label 插件处理)。
目前,我有一个正在运行的过滤器,如果用户的 $shipping_state 位于过滤器的 2 状态数组中,则该过滤器会取消设置所有其他运输方式。如果州地址不在 2 个州的数组中,另一个过滤器会显示除 3-Day_Air 选项之外的所有运输选项。
然后,下面代码片段中的此过滤器会将 3 天航空的传入实时价格更改为 69.95 美元的运费。
我的问题:如果购物车小计超过 200 美元,有没有办法从代码片段中设置的费率中减去 50 美元? (或者如果满足 >200 条件,则重置费率 19.95 美元?)
这是另一种解决方法,但它必须仅适用于 Shipping_address 是这两种状态之一的情况。
任何帮助将不胜感激。我正在学习一些 PHP 的知识,但它很快就变得模糊起来。预先感谢。
add_filter( 'woocommerce_package_rates', function( $shipping_costs) {
$shipping_method_min_cost = array(
'wf_shipping_ups:12' => 69.95, // Shipping id => min_cost
);
foreach( $shipping_costs as $shipping_cost ) {
$shipping_method_id = $shipping_cost->get_id();
if( isset($shipping_method_min_cost[$shipping_method_id]) ) {
$cost = (float) $shipping_cost->get_cost();
if( $cost < $shipping_method_min_cost[$shipping_method_id] ) {
$shipping_cost->set_cost($shipping_method_min_cost[$shipping_method_id]);
}
}
}
return $shipping_costs;
});
您只需在函数中使用以下内容:
$shipping_method_min_cost = array(
'wf_shipping_ups:12' => WC()->cart->subtotal >= 200 ? 69.95 : 19.95,
);
应该可以。