2017-02-15 11 views
1

次のコードは、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 = ''); 
      } 
     } 
    } 
} 

答えて

0

各料金の名前を一意にする必要があります。 documentationから

$名 - (文字列)が必要 - 有料で一意の名前。 同じ名前の複数の手数料は加算できません。

これはそれを行うための一つの方法のようになります。

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