Стоимость доставки на основе прогрессивного количества с максимальной стоимостью в 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/
Стремитесь получить функцию, которая приближается к некоторому пределу, указав точки данных, а затем инструмент аппроксимирует функцию, соответствующую этим данным. Это решение не приведет к регулярным приятным платежам, но будет быстрым решением, если вы не хотите влезать в код.