Следующий код из установки 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 = '');
}
}
}
}