2017-02-15 2 views
1

Следующий код из установки wordpress + woocommerce. Он должен проверять каждый товар в корзине и, если товар относится к определенным категориям товаров (категории ит. 79 & 130 добавить плату в размере 15 €, категория 80, 136, 139 добавить 50 евро) добавьте дополнительную плату в зависимости от категории. Для простоты я буду называть их категория группа 15 € и категория группа 50 €.PHP foreach код, не создающий ожидаемых результатов

При добавлении одного предмета в корзину, относящейся к любой группе категорий 15 € или группе категорий 50 €, дополнительная плата добавляется, как ожидалось.

При добавлении двух предметов в корзину, принадлежащих разным категориям, дополнительные сборы добавляются, как ожидалось.

Но если в корзину, относящейся к одной и той же категории, добавлено более одной позиции, добавляется только одна плата за группу категорий, что нежелательно. Каждый добавленный предмет должен нести соответствующую плату группы категорий. Например. 2 предмета категории 15 евро должны добавить 2 дополнительных сбора, 3 предмета из категории 50 евро должны добавить 3 дополнительных сбора и так далее.

Есть ошибки в коде или ...?

function woo_add_cart_fee() { 

global $woocommerce; 

    foreach ($woocommerce->cart->cart_contents as $key => $values) { 
     // Get the terms, i.e. category list using the ID of the product 
    $terms = get_the_terms($values['product_id'], 'product_cat'); 
     // Because a product can have multiple categories, we need to iterate through the list of the products category for a match 
     foreach ($terms as $term) { 
      // 79 is the ID of the category for which we want to remove the payment gateway 
      if($term->term_id == '79' || $term->term_id == '130'){ 
      $excost = 15; 
      $woocommerce->cart->add_fee('Εκτύπωση με απλό μελάνι', $excost, $taxable = false, $tax_class = ''); 
      } else if ($term->term_id == '80' || $term->term_id == '139' || $term->term_id == '136'){ 
       $excost = 50; 
       $woocommerce->cart->add_fee('Μακέτα & εκτύπωση (απλό μελάνι)', $excost, $taxable = false, $tax_class = ''); 
      } 
     } 
    } 
} 

ответ

0

Вам необходимо указать уникальную стоимость каждого платежа.

documentation От:

$ имя - (строка) требуется - Уникальное имя для гонорара. Невозможно добавить несколько комиссионных с таким же именем.

Это будет один из способов сделать это:

$woocommerce->cart->add_fee('Μακέτα & εκτύπωση (απλό μελάνι) ' . $i++, $excost, $taxable = false, $tax_class = '');