2017-01-31 6 views
0

В WooCommerce я хотел бы сделать скидку без использования купонов, а расчет скидки будет основан на цене продукта, с чем-то вроде «возьмите 3 продукта по цене 2 .Корзина add_fee() не работает на странице проверки

в function.php моей активной темы я использую этот код:

function promo() { 
    if (is_cart()) { 
     $woocommerce->cart->add_fee(__('des', 'woocommerce'), -50.00`enter code here`, true, ''); 
    } 
} 
add_action ('woocommerce_cart_calculate_fees', 'promo'); 

моей проблема: этот код не работает на кассе странице
Если я заставляю в обзоре порядка скидка. появляется, но общая стоимость не меняется. Я думаю, что ее нет t сохранение платы.

Как я могу заставить его работать (на странице проверки)?

Благодаря

ответ

1

Этот крюк сделан на корзину сборов (или скидки), поэтому вы должны удалитьif (is_cart()) { состояние, , что почему это не работает ...

Вот правильный функциональный код, чтобы получить скидку «Купить 2 принять 3», которая сделает скидку на основе количества позиций:

add_action('woocommerce_cart_calculate_fees' , 'discount_2_for_3', 10, 1); 
function discount_2_for_3($cart_object){ 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    // Initialising variable 
    $discount = 0; 

    // Iterating through cart items 
    foreach($cart_object->get_cart() as $cart_item){ 

     // Getting item data from cart object 
     $item_id = $cart_item['product_id']; // Item Id or product ID 
     $item_qty = $cart_item['quantity']; // Item Quantity 
     $product_price = $cart_item['data']->price; // Product price 
     $line_total = $cart_item['line_total']; // Price x Quantity total line item 

     // THE DISCOUNT CALCULATION 
     if($item_qty >= 3){ 
      // For each item quantity step of 3 we add 1 to $qty_discount 
      for($qty_x3 = 3, $qty_discount = 0; $qty_x3 <= $item_qty; $qty_x3 += 3, $qty_discount++); 
      $discount -= $qty_discount * $product_price; 
     } 
    } 

    // Applied discount "2 for 3" 
    if($discount != 0){ 
     // Note: Last argument is related to applying the tax (false by default) 
     $cart_object->add_fee(__('Des 2 for 3', 'woocommerce'), $discount, false); 
    } 

} 

Это будет работать для простых продуктов, но не вариации продукта ...

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

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