在WooCommerce中设置每个订单项的运费

时间:2019-05-12 06:16:04

标签: php wordpress woocommerce cart shipping-method

woocommerce运输有一个内置选项,用于设置购物车中产品数量的费用。每个运输类别还提供收费选项。但是我有成千上万的产品,并且需要为每个产品收取费用(每个产品不是数量的产品)。

例如,购物车中有2个产品“苹果”和23个产品“橙色”。我需要对任何数量的苹果和任何数量的橙子收取10美元的固定费用。我似乎在任何可用的插件中都找不到解决方案。他们都按数量收费,但不收费。

1 个答案:

答案 0 :(得分:0)

要按购物车中的订单项获取费用,需要满足以下条件:

1)在WooCommerce设置>运送中:为“固定费率”运送方式(并保存)设置费用10。

2)将活动子主题(或活动主题)添加到functions.php文件中,此代码:

add_filter( 'woocommerce_package_rates', 'shipping_cost_based_on_number_of_items', 10, 2 );
function shipping_cost_based_on_number_of_items( $rates, $package ) {
    $numer_of_items = (int) sizeof($package['contents']);

    // Loop through shipping rates
    foreach ( $rates as $rate_key => $rate ){
        // Targetting "Flat rate" shipping method
        if( 'flat_rate' === $rate->method_id ) {
            $has_taxes = false;

            // Set the new cost
            $rates[$rate_key]->cost = $rate->cost * $numer_of_items;

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

刷新运输缓存: (必需)

     
      
  1. 此代码已保存在活动主题的function.php文件中。
  2.   
  3. 购物车是空的
  4.   
  5. 在运输区域设置中,禁用/保存任何运输方式,然后启用“后退” /保存。
  6.   

经过测试,可以正常工作。