@ekrasova

Как сделать купон-скидку на каждый 3 товар в корзине?

Всем привет.
Подскажите, пожалуйста, как можно дописать код ниже, который был найден тут, чтобы он работал не только один раз для 3 товара, а для каждого 3(3,6,9,12..). Выручите,пожалуйста, уже который день бьюсь над этим и никак

add_action( 'woocommerce_cart_calculate_fees','hml_fee_one_plus_one', 10, 1 );
function hml_fee_one_plus_one( WC_Cart $cart_object ) {
  global $wpdb, $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { return; }
  
  $arr_cart = $cart_object->get_cart();
  if ( 0 == sizeof($arr_cart) ) { return; }
        
  	$count = 0;
    $min_price = 0;
    $category_id = 81; 
     // получаем список всех вложенных категорий включая родительскую
    $cats = hml_get_category_gender_line( $category_id );
    
 foreach( $arr_cart as $item_key => $value ) {
 if ( has_term($cats, 'product_cat', $value['product_id'] ) ) {
        $count += $value["quantity"];
        $product = $value['data'];
        $price = $product->get_price();
        if ( $price ) {	$prices[] = floatval($price); }
      }
    }
    
    $min_price = max( $min_price, min($prices) );
    
    if ( $count >= 3 && $min_price > 0 ) {
      $fee = -1 * $min_price;
      $cart_object->add_fee( __('Акция'), $fee );
    }
    
    //}   
}

function hml_get_category_gender_line( $cat_parent ){
  $line = get_term_children( (int) $cat_parent, 'product_cat');
  $line[] = $cat_parent;
  return $line;
}
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вам надо перестроить массив prices.
Сейчас он содержит цены всех товаров находящихся в корзине. Вам надо собрать массив prices учитывая количество каждого товара. т.е. если какогото товара 2шт то в массиве prices должно быть две записи цены этого товара.
Далее все просто
- Сортируете prices по возрастанию
- находите кратность количества трем ( количество / 3 )
- берете полученное количество элементов из prices - это Ваша акционная сумма.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы