В магазине 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; } }
Редактировать: первый раз вставил неправильный код