Увеличьте фиксированную стоимость доставки за X шагов с мин. базовый заряд - Woocommerce - PullRequest
0 голосов
/ 01 мая 2020

В магазине WooCommerce у меня есть различные продукты, которые будут соответствовать тарифу доставки в зависимости от количества точек останова.

Т.е.:

  • Class1_1: базовая ставка сборов 1, и добавляет базовую ставку для каждого добавленного элемента;
  • Class1_2: взимает базовую ставку 1 для первого элемента, а затем снова взимает базовую ставку для случаев, когда количество равно кратному 2.

Пока у меня есть это, но оно не добавляется для каждого элемента. Он вернет результат для первого найденного класса, затем остановится.

Так что, если есть Class1_1 предметов и Class2_1 предметов, он будет выполнять уравнение только для первого.

Что мне нужно сделать, чтобы это l oop и все товарные позиции?

 add_filter( 'woocommerce_package_rates', 'different_rates_based_on_quantity_class1_3', 10, 2 );

    function different_rates_based_on_quantity_class1_3 ( $rates, $package ){

        $item_count = 0;

        // Checking in cart items
        foreach( WC()->cart->get_cart() as $cart_item ){


        $slug_class_shipping =  $cart_item['data']->get_shipping_class();


        switch ($slug_class_shipping) {
            case "class1_3":
                $step_change = 3;
                break;
            case "class1_2":
                $step_change = 2;
                break;
            case "class3_1":
                $step_change = 1;
                break;
            default:
                 $step_change = 1;
        }
        // If we find the shipping class
        if( $cart_item['data']->get_shipping_class() == $slug_class_shipping ){

        $item_count += $cart_item['quantity']; // Cart item count
        $rate_operand = ceil( $item_count / $step_change ); // Operand increase each # 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;
        } break; } } 

Редактировать: первый раз вставил неправильный код

...