Woocommerce 更新后设置购物车运费总额问题

Set cart shipping total amount issue after Woocommerce update

更新后我的自定义运费规则不起作用。在更新之前,我使用以下代码来更新运费。

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;
}

任何人都可以帮助我并告诉我如何使用这个功能或者是否有其他方法可以做到这一点。 谢谢。

您可以改用 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 文件。测试和工作。

You might need to refresh shipping cached data: disable, save and enable, save related shipping methods for the current shipping zone, in Woocommerce shipping settings.

在这个钩子中如果你需要遍历购物车商品(例如进行一些计算),你将在函数代码中使用:

foreach( $package['contents'] as $cart_item_key => $cart_item ) {
     $product = $cart_item['data']; // Get the WC_Product instance Object

     // your code
}