更新后,我的自定义运输金额规则不起作用。在更新之前,我使用以下代码更新了运费。
add_action('woocommerce_calculate_totals', 'mysite_box_discount');
function mysite_box_discount($cart )
{
$cart->shipping_total=100;
return $cart;
}
更新后,$ cart数组的结构已更改,以上代码已停止工作。现在,数据以受保护的数组形式出现。我发现$ cart-> get_shipping_total();可以获取我的运费。
我还发现了以下功能来更新运费。
$cart->set_shipping_total($amount);
所以我以以下方式使用它,但是它不起作用。
add_action('woocommerce_calculate_totals', 'mysite_box_discount');
function mysite_box_discount($cart )
{
$cart->set_shipping_total(100);
return $cart;
}
任何人都可以帮助我,告诉我如何使用此功能或是否有其他方法可以使用它。 谢谢。
答案 0 :(得分:1)
您可以改用woocommerce_package_rates
过滤器挂钩来设置运输方式的费用,这与您的旧代码类似:
add_filter('woocommerce_package_rates', 'custom_shipping_costs', 10, 2 );
function custom_shipping_costs( $rates, $package ){
// Loop through shipping methods rates
foreach ( $rates as $rate_key => $rate ){
// Targeting all shipping methods except "Free shipping"
if ( 'free_shipping' !== $rate->method_id ) {
$has_taxes = false;
$taxes = [];
$rates[$rate_key]->cost = 100; // Set to 100
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
$has_taxes = true;
$taxes[$key] = 0; // Set to 0 (zero)
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。
您可能需要刷新运输缓存的数据:在Woocommerce运输设置中禁用,保存和启用并保存当前运输区域的相关运输方法。
在此挂钩中如果您需要遍历购物车商品(例如进行一些计算),将在函数代码内部使用:
foreach( $package['contents'] as $cart_item_key => $cart_item ) {
$product = $cart_item['data']; // Get the WC_Product instance Object
// your code
}