У меня в основном 3 цены на продукцию. Один продукт — полная цена, 6 упаковок — скидка 5%, 24 упаковки скидка 10%. Тем не менее, если бы клиент должен был купить, например, 25, он бы взял пакет из 24 штук, включая скидку 10% 1 единицу полной цены, а для 14 — 2 6 пачек со скидкой 5% и 2 единичные полные цены. Я пытался обдумать это, может кто-нибудь дать совет, где я ошибся, или объяснить логику, которую я должен использовать? Я был бы очень признателен.

Обновлено Я сейчас изменил свой подход, но он еще не совсем там. Любые советы отсюда кто-нибудь?

add_action( 'woocommerce_before_calculate_totals', 'quantity_based_pricing', 9999 ); function quantity_based_pricing( $cart ) { // Define discount rules and thresholds $threshold1 = 6; // Change price if items = 6 $discount1 = 0.05; // Reduce unit price by 5% $threshold2 = 24; // Change price if items = 24 $discount2 = 0.1; // Reduce unit price by 10% $threshold3 = 1; $discount3 = 0; $new_price=0; foreach ( $cart-{amp}gt;get_cart() as $cart_item_key ={amp}gt; $cart_item ) { $product_id = $cart_item['product_id']; $quantity = $cart_item['quantity']; $price = $cart_item['data']-{amp}gt;get_price(); if((int)($quantity/$threshold2)==0){ for($i=0; $i{amp}lt;(int)($quantity/$threshold2);$i  ){ $new_price =$threshold2*$price*(1-$discount2); } cart_item['data']-{amp}gt;set_price( $new_price ); } else{ if((int)($quantity/$threshold2)!=0){ for($i=0; $i{amp}lt;(int)($quantity/$threshold2);$i  ){ $new_price =$threshold2*$price*(1-$discount2); } $remainder = $quantity % $threshold2; if((int)($remainder/$threshold1)==0){ for($i=0; $i{amp}lt;(int)($remainder/$threshold2);$i  ){ $new_price =$threshold1*$price*(1-$discount1); } cart_item['data']-{amp}gt;set_price( $new_price ); } elseif((int)($remainder/$threshold1)!=0){ for($i=0; $i{amp}lt;(int)($remainder/$threshold2);$i  ){ $new_price =$threshold1*$price*(1-$discount1); } $remainder2 = $remainder % $threshold1; $new_price = $remainder2 *$price; cart_item['data']-{amp}gt;set_price($new_price); } } } } } 

Даниил

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Кодекс поведения

,

Вы должны получить количество из $ cart_item [‘количество’].

Это решение:

 {amp}lt;?php $price=100; //per item. Test values $cart_item_quatity=25; //Test values $new_price=0; $thresh1=5; $thresh2=24; $off1=0.05; $off2=0.1; if((int)($cart_item_quatity/$thresh2)!=0){ // Add the full price for items left out or over the second threshold $new_price =($cart_item_quatity%$thresh2)*$price; for($i=0;$i{amp}lt;(int)($cart_item_quatity/$thresh2);$i  ){ $new_price =$thresh2*$price*(1-$off2); } }elseif((int)($cart_item_quatity/$thresh1)!=0){ // Add the full price for items left out or over the second threshold $new_price =($cart_item_quatity%$thresh1)*$price; for($i=0;$i{amp}lt;(int)($cart_item_quatity/$thresh1);$i  ){ $new_price =$thresh1*$price*(1-$off1); } }else{ $new_price =$cart_item_quatity*$price; } 

Заметка! Если кто-то покупает 24 5 товаров, этот код будет применять только «специальную» цену для 24 товаров, а затем взимать полную цену за остальные 5 товаров (пользователь, конечно, может разделить заказ на две части и воспользоваться обеими скидками).