运输成本基于Woocommerce 3中的购物车总重量 [英] Shipping cost based on cart total weight in Woocommerce 3

查看:116
本文介绍了运输成本基于Woocommerce 3中的购物车总重量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Woocommerce网上商店中,我确实有不同的产品.我想根据购物车总重量计算运费:

In my Woocommerce Webshop I do have different Products. I would like to have shipping cost calculated on total cart items weight:

  • 06千磅的成本为 5 €
  • 612千磅的成本为 9 €
  • from 0 to 6 Kilos the cost is 5 €,
  • from 6 to 12 Kilos the cost is 9 €

实际上,如果我有一个商品为1公斤,则运费为 5 € ,但如果我的购物篮中有 10 件该商品,则运费费用仍为 5 € (应改为 9 € ).

Actually if I have a Product which is 1 Kilo the shipping cost is 5 €, but if I have 10 items of this product in my basket, the shipping fee is still 5 € (and it should be 9 € instead).

如何根据购物车总重量计算累进运费?

How can I have a progressive shipping cost based on cart total weight?

推荐答案

尝试以下功能,平均费用"的费用将根据购物车的总重量进行更改.

Try the following function which "Flat Rate" cost will be changed based on cart total weight.

使用统一费率"送货方式,您将需要设置参考送货费用,并且只需简单的初始费用,而不是任何公式.例如可以是1.这笔费用将由我的答案代码取代,并根据购物车总重量动态变化.

Using "Flate rate" shipping method, you will need to set a reference shipping cost with a simple initial cost instead of any formula. It can be for example 1. This cost will be replaced by my answer code, dynamically based on cart total weight.

您可能需要在常规运送设置中的"运输选项"标签下的"启用调试模式",以禁用临时运输缓存.

You may have to "Enable debug mode" in general shipping settings under "Shipping options" tab, to disable temporarily shipping caches.

add_filter('woocommerce_package_rates', 'shipping_cost_based_on_weight', 12, 2);
function shipping_cost_based_on_weight( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    // HERE define the differents costs
    $cost1 = 5; // Up to 6 Kg
    $cost2 = 9; // Above 6 Kg and below 12 kg
    $cost3 = 9; // Above 12 kg

    // The cart total Weight
    $total_weight = WC()->cart->get_cart_contents_weight();

    // Loop through the shipping taxes array
    foreach ( $rates as $rate_key => $rate ){
        $has_taxes = false;
        // Targetting "flat rate"
        if( 'flat_rate' === $rate->method_id ){
            // Get the initial cost
            $initial_cost = $new_cost = $rates[$rate_key]->cost;

            // Calculate new cost
            if( $total_weight <= 6 ) { // Below 6 Kg
                $new_cost = $cost1;
            }
            elseif( $total_weight > 6 && $total_weight <= 12 ) { // Between 6 and 12 Kg
                $new_cost = $cost2;
            }
            else { // Above 12 Kg
                $new_cost = $cost3;
            }

            // Set the new cost
            $rates[$rate_key]->cost = $new_cost;

            // Taxes rate cost (if enabled)
            $taxes = [];
            // Loop through the shipping taxes array (as they can be many)
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $rates[$rate_key]->taxes[$key] > 0 ){
                    // Get the initial tax cost
                    $initial_tax_cost = $new_tax_cost = $rates[$rate_key]->taxes[$key];
                    // Get the tax rate conversion
                    $tax_rate    = $initial_tax_cost / $initial_cost;
                    // Set the new tax cost
                    $taxes[$key] = $new_cost * $tax_rate;
                    $has_taxes   = true; // Enabling tax
                }
            }
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件中.经过测试,可以正常工作.

Code goes in function.php file of your active child theme (or active theme). Tested and works.

经过测试,别忘了在出厂设置中禁用启用调试模式"选项.

Once tested, don't forget to disable "Enable debug mode" option in shipping settings.

这篇关于运输成本基于Woocommerce 3中的购物车总重量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆