2017-02-09 3 views
3

Я создал магазин Woocommerce и желаю установить конкретную скидку на все товары на основе кратных 12 (коробка). Я пробовал много плагинов скидок, но не нашел то, что искал.Добавление скидки на товары по заказу на основе количества товаров

Например, если я заказываю 12 продукта X, я получаю скидку 10%. Если я закажу 15 продуктов X, я получаю 10% скидку на первые 12, а последние три - на полную цену. Если я заказываю 24, то, что 10% скидка распространяется на все 24 продукта X.

Ближайший я нашел это: Discount for Certain Category Based on Total Number of Products

Но это применяется в качестве скидки (на самом деле отрицательное вознаграждение) в конец, и я хотел бы отображать скидку в корзине рядом с продуктом, как обычные скидки.

Мне также нужна эта скидка, чтобы быть отключенной, если продукт уже в продаже.

Спасибо.

ответ

3

Да, это также возможно, что делает пользовательский расчет для каждой корзины предмета и замена по отдельности их цене (соответствующей ваши условия и расчеты), используя пользовательскую функцию, замкнув woocommerce_before_calculate_totals действия крюка.

Это код:

add_action('woocommerce_before_calculate_totals', 'custom_discounted_cart_item_price', 10, 1); 
function custom_discounted_cart_item_price($cart_object) { 

    $discount_applied = false; 

    // Set Here your targeted quantity discount 
    $t_qty = 12; 

    // Iterating through each item in cart 
    foreach ($cart_object->get_cart() as $item_values) { 

     ## Get cart item data 
     $item_id = $item_values['data']->id; // Product ID 
     $item_qty = $item_values['quantity']; // Item quantity 
     $original_price = $item_values['data']->price; // Product original price 

     // Getting the object 
     $product = new WC_Product($item_id); 


     // CALCULATION FOR EACH ITEM 
     // when quantity is up to the targetted quantity and product is not on sale 
     if($item_qty >= $t_qty && !$product->is_on_sale()){ 
      for($j = $t_qty, $loops = 0; $j <= $item_qty; $j += $t_qty, $loops++); 

      $modulo_qty = $item_qty % $t_qty; // The remaining non discounted items 

      $item_discounted_price = $original_price * 0.9; // Discount of 10 percent 

      $total_discounted_items_price = $loops * $t_qty * $item_discounted_price; 

      $total_normal_items_price = $modulo_qty * $original_price; 

      // Calculating the new item price 
      $new_item_price = ($total_discounted_items_price + $total_normal_items_price)/$item_qty; 


      // Setting the new price item 
      $item_values['data']->price = $new_item_price; 

      $discount_applied = true; 
     } 
    } 
    // Optionally display a message for that discount 
    if ($discount_applied) 
     wc_add_notice(__('A quantity discount has been applied on some cart items.', 'my_theme_slug'), 'success'); 
} 

Это делает именно скидка, что вы ждете отдельно для каждого элемента в корзине (на основе его количество) , а не для элементов, которые находятся в продаже. Но вы не получите никакой метки (текста), указывающей скидку в позициях корзины.

При желании отобразить уведомление, когда скидка применяется к некоторым КОРЗИНА пунктов ...

код идет в function.php файле Вашего активного ребенка темы (или темы), или же в любом файле плагина.

Этот код проверен и работает.

+1

Спасибо, это прекрасно. – Phovos

Смежные вопросы