Стоимость доставки на основе прогрессивного количества с максимальной стоимостью в Woocommerce

(Как) я могу установить max_fee для фиксированной стоимости доставки в WooCommerce?

Добавление этого в поле затрат в настройках фиксированной платы метода доставки работает:

(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"]

Это возможно? / Какой правильный синтаксис использовать? Я не могу найти это нигде. Я нашел только эту ссылку ("добавить атрибут шорткода max_fee для фиксированной ставки" / "разрешить max_fee в дополнение к min_fee в полях затрат по фиксированной ставке"), которая, кажется, указывает на то, что функция запрашивает max_fee для фиксированных сборов (кроме процентов) реализовано. Но я не могу заставить его работать.

2 ответа

Решение

Вы не можете использовать доступные настройки для взимания переменной стоимости доставки, как определено:

  • 3,50 за первый пункт
  • 4,50 для более чем одного предмета (2 или более)

Поэтому вам нужно будет использовать следующую настраиваемую подключаемую функцию:

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:

Теперь стоимость доставки будет меняться с 3.50 (за одну вещь) 4.50 (для более чем одного предмета)

Самый простой способ, который я могу придумать, - это аппроксимировать пользовательскую функцию с помощью такого инструмента, как: https://mycurvefit.com/

Стремитесь получить функцию, которая приближается к некоторому пределу, указав точки данных, а затем инструмент аппроксимирует функцию, соответствующую этим данным. Это решение не приведет к регулярным приятным платежам, но будет быстрым решением, если вы не хотите влезать в код.

Другие вопросы по тегам