次のコードは、wordpress + woocommerceのインストールのコードです。カート内のすべての商品を確認し、その商品が特定の商品カテゴリ(カテゴリIDは79 & 130に15ユーロ追加、カテゴリ80,136,139は50ユーロ追加)に属する場合、カテゴリに応じて追加料金を追加します。わかりやすくするため、カテゴリグループ15€およびカテゴリグループ50€と呼びます。PHP foreachコードが詳細な結果を生成しない
カートに1つのアイテムが追加されると、いずれかのカテゴリグループ15€またはカテゴリグループ50€に属している場合、追加料金が予想通りに追加されます。
異なるカテゴリグループに属する2つのアイテムがカートに追加されると、追加料金が期待通りに追加されます。
しかし、同じカテゴリグループに属する複数のアイテムがカートに追加された場合、カテゴリグループごとに1つの料金が追加されますが、これは望ましくありません。追加されたすべてのアイテムに関連するカテゴリグループの料金が発生するはずです。例えば。カテゴリグループ15の2つのアイテムは、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 = '');
}
}
}
}