在Woocommerce中基于数量的渐进式运输成本和最大成本

时间:2018-12-28 14:34:47

标签: php wordpress woocommerce cart shipping-method

(如何)我可以在WooCommerce中为固定费用运输费用设置max_fee?

将其添加到送货方式的固定费用设置的“费用”字段中是可行的:

(1 * [qty]) + [fee min_fee = "2,5"]

(即,每笔订单的运输费用为2.5,再加上每种产品的1欧元)->至少为3.5,并为每种产品增加+1。)

但是,我想收取的最低费用为3,50(1件商品),最高收取4,50(2或更多商品)。即从功能上来说,此公式为:(3,5 * [qty]) [fee **max_fee** = "4,5"]

这可能吗? /使用正确的语法是什么?我在任何地方都找不到。我只发现this reference ("add max_fee shortcode attribute for flat rate" / "allow max_fee in addition to min_fee in flat rate costs fields")似乎表明已实现针对固定费用(百分比除外)的max_fee的功能请求。但是我无法正常工作。

1 个答案:

答案 0 :(得分:1)

您不能使用可用的设置来收取定义的可变运输费用:

  • 3,50 用于第一项
  • 4,50 (一项或多项)(两项或多项)

因此,您将需要使用以下自定义的挂钩函数:

add_filter('woocommerce_package_rates', 'custom_shipping_costs', 10, 2 );
function custom_shipping_costs( $rates, $package ){
    // Get cart items count
    $items_count = WC()->cart->get_cart_contents_count();

    // Your cost settings
    $new_cost = $items_count > 1 ? 4.5 : 3.5;

    // Loop through shipping methods rates
    foreach ( $rates as $rate_key => $rate ){
        $has_taxes = false;

        // Targeting "Flat rate" shipping methods
        if ( 'flat_rate' === $rate->method_id ) {
            $default_cost = $rates[$rate_key]->cost;

            $rates[$rate_key]->cost = $new_cost;

            $rate_conversion = $new_cost / $default_cost;

            // Taxes rate cost (if enabled)
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $tax > 0 ){
                    $taxes[$key] = $tax * $rate_conversion;
                    $has_taxes = true;
                }
            }
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

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

  

保存代码后,进入统一费率设置并将费率成本设置为 1.00

     

enter image description here

     

现在,运费将从 3.50 (针对一件商品)更改为 4.50 (用于多个项目)