2016-11-24 4 views
3

Мой код работает хорошо, но только для одной кошки (здесь ID 25).
С трудом добавить вторую категорию (ID 24).
Дополнительная плата на основе двух категорий товаров

Этот код я использую для категории ID 25:

function df_add_ticket_surcharge($cart_object) { 

    global $woocommerce; 
    $specialfeecat = 25; // category id for the special fee 
    $spfee = 2; // initialize special fee 
    $spfeeperprod = 0.0; //special fee per product 

    foreach ($cart_object->cart_contents as $key => $value) { 

     $proid = $value['product_id']; //get the product id from cart 
     $quantiy = $value['quantity']; //get quantity from cart 
     $itmprice = $value['data']->price; //get product price 

     $terms = get_the_terms($proid, 'product_cat'); //get taxonamy of the prducts 
     if ($terms && ! is_wp_error($terms)) : 
      foreach ($terms as $term) { 
       $catid = $term->term_id; 
       if($specialfeecat == $catid) { 
        $spfee = $spfee + $itmprice * $quantiy * $spfeeperprod; 
       } 
      } 
     endif; 
    } 

    if($spfee > 0) { 

     $woocommerce->cart->add_fee('Supp. préparation fruit légumes', $spfee, true, 'standard'); 
    } 
} 
add_action('woocommerce_cart_calculate_fees', 'df_add_ticket_surcharge'); 

Как я могу сделать, чтобы обрабатывать 2 категории в этом коде?

Благодаря

ответ

0

Самый короткий, быстрый и эффективный способ использовать условия, связанные с категориями продукции является использование has_term() WordPress функции с «product_cat» систематики ...

Так что ваш код будет выглядеть следующим образом:

add_action('woocommerce_cart_calculate_fees', 'df_add_ticket_surcharge', 10, 1); 
function df_add_ticket_surcharge() { 

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

    $specialfeecat = 25; // category id for the special fee 
    $spfee = 2; // initialize special fee 
    $spfeeperprod = 0.05; //special fee per product (5% here) 

    foreach (WC()->cart_contents as $cart_item) { 

     $item_id = $cart_item['product_id']; //get the product id from cart 
     $item_qty = $cart_item['quantity']; //get quantity from cart 
     $item_price = $cart_item['data']->price; //get product price 

     if(has_term(24, 'product_cat', $item_id) || has_term(25, 'product_cat', $item_id)) { 
      $spfee = $spfee + $item_price * $item_qty * $spfeeperprod; 
      // you may need "break;" if you have multiple items in cart (to stop the calculation) 
      // because $spfee is going to grow with each additional item 
      break; 
     } 
    } 

    if($spfee > 0) 
     WC()->cart->add_fee('Supp. préparation fruit légumes', $spfee, true, 'standard'); 

} 

Я также добавить значение переменной $spfeeperprod, как будто вы держите 0.0 Вы всегда получите 0 расчет стоимости расчета.

Также позаботьтесь о своем $ расчета spfee в цикле Еогеасп, как будто есть больше чем один соответствующий пункт, то расчет будет увеличение в каждом цикле ...

Связанные ссылки:

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