Woocommerce更新后设置购物车发货总额问题

时间:2018-11-29 11:48:20

标签: wordpress woocommerce shipping

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

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

任何人都可以帮助我,告诉我如何使用此功能或是否有其他方法可以使用它。 谢谢。

1 个答案:

答案 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
}