每n个项目更改WooCommerce统一费率

时间:2019-04-24 作者:LOTUSMS

我在这个答案中找到了解决问题的半功能解决方案WooCommerce - Flat rate shipping based on X quantity steps? 但这会计算购物车项目的总数量,因为如果客户添加了一个可以打包在一起的小项目,并且该项目使购物车项目的总数超过阈值,则会导致发货量翻倍。仅当特定类别(即大型装运类别)超过阈值时,我需要将装运加倍。这里有一些我需要的例子。

现场2类产品

衬衫(一个包装中最多只能发送3件)-分类为“大发货类别”(可以在一个包装中发送多件)因为如果客户购买了这两种产品的组合,我可以将这些戒指添加到衬衫包装中,所以我设置了运费,以收取最大的发货类别(大发货)。

这里有一些订单样本

3件T恤=8美元运费3件T恤+6枚戒指=8美元运费4件T恤=16美元运费(每3秒翻一倍)4件T恤+6枚戒指=16美元(忽略戒指作为购物车数量)下面的代码就是这样做的

3件T恤=8美元运费(好)3件T恤+1枚戒指=16美元运费(不好)6件T恤=16美元运费(好)

    看到我的困境了吗?我想修改下面的代码,只计算特定装运类别中的项目,而不是购物车数量。

    这是密码

    add_filter( \'woocommerce_package_rates\', 
       \'change_shipping_method_rate_based_on_shipping_class_2\', 11, 2 );
       function change_shipping_method_rate_based_on_shipping_class_2( $rates, $package ){
    
            $items_count  = WC()->cart->get_cart_contents_count(); // Cart item count
            $items_change = 5; // number of items needed to increase the cost each time
            $rate_operand = ceil( $items_count / $items_change ); // Operand increase each 5 items here
    
            foreach ( $rates as $rate_key => $rate ){
               // Targetting "Flat rate"
               if( \'flat_rate\' === $rate->method_id ) {
                  $has_taxes = false;
    
                  // Set the new cost
                  $rates[$rate_key]->cost = $rate->cost * $rate_operand;
    
                  // Taxes rate cost (if enabled)
                  foreach ($rates[$rate_key]->taxes as $key => $tax){
                     if( $tax > 0 ){
                         // New tax calculated cost
                         $taxes[$key] = $tax * $rate_operand;
                         $has_taxes = true;
                     }
               }
               // Set new taxes cost
               if( $has_taxes )
               $rates[$rate_key]->taxes = $taxes;
            }
        }
        return $rates;
    }
    
    非常感谢您的帮助

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

要根据属于特定装运类别的购物车项目数量计数更改“统一费率”装运成本,您需要一些不同的东西:

add_filter( \'woocommerce_package_rates\', \'progressive_shipping_cost_based_shipping_class_quantity_steps\', 10, 2 );
function progressive_shipping_cost_based_shipping_class_quantity_steps( $rates, $package )
{
    // HERE Bellow your settings
    $shipping_class = "large-shipping"; // The shipping class ID
    $qty_step       = 3; // Items qty threshold for a step
    $item_count     = 0; // Initializing

    // Get the shipping class ID
    $class_id = get_term_by(\'slug\', $shipping_class, \'product_shipping_class\' )->term_id;


    // Loop through in cart items to get the Tshirts count
    foreach( $package[\'contents\'] as $cart_item ) {
        if ( $cart_item[\'data\']->get_shipping_class_id() == $class_id ){
            $item_count += $cart_item[\'quantity\']; // Count Tshirts
        }
    }

    // The rate operand increase each {$qty_step} depending on {$item_count}
    $rate_operand = ceil( $item_count / $qty_step );

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

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

            // Taxes rate cost (if enabled)
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $tax > 0 ){
                    // New tax calculated cost
                    $taxes[$key] = $tax * $rate_operand;
                    $has_taxes = true;
                }
            }
            // Set new taxes cost
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}
代码进入功能。活动子主题(或活动主题)的php文件。已测试并正常工作。

Refresh the shipping caches: (必需)

此代码已保存在活动主题的函数中。php文件

  • 购物车是空的,在配送区设置中,禁用/保存任何配送方式,然后启用后退/保存
  • 相关推荐

    使用php变量使用WPDB搜索数据库

    我正在尝试为我的网站数据库做一个基本的搜索功能。我想使用Wordpress和WPDB搜索自定义数据库表中的文本内容。出于某种原因,搜索没有从数据库返回任何内容,但我也没有收到任何错误消息。这是我的代码:第页。php:<form class=\"searchCV_form\" role=\"form\" action=\"\"> <div> <input type=\"text\" id=\"search_text\" name=\"