2017-02-15 9 views
1

Der folgende Code stammt aus einer Wordpress + Woocommerce Installation. Es soll jeden Artikel im Warenkorb überprüfen und wenn der Artikel zu bestimmten Produktkategorien gehört (Kategorie IDs 79 & 130 add 15 € Gebühr, Kategorie 80, 136, 139 add 50 € Gebühr) add Aufpreis entsprechend Kategorie. Der Einfachheit halber nenne ich sie Kategorie Gruppe 15 € und Kategorie Gruppe 50 €.PHP foreach Code produziert nicht erwartet Ergebnisse

Wenn ein Artikel zum Warenkorb hinzugefügt wird, der entweder zu der Kategorie 15 € oder der Kategorie 50 € gehört, wird die zusätzliche Gebühr wie erwartet hinzugefügt.

Wenn zwei Artikel zum Warenkorb hinzugefügt werden, die zu verschiedenen Kategorien gehören, werden die zusätzlichen Kosten wie erwartet hinzugefügt.

Wenn jedoch mehr als ein Artikel zum Warenkorb hinzugefügt wird, der zu derselben Kategoriegruppe gehört, wird nur eine Ladung pro Kategoriegruppe hinzugefügt, was nicht wünschenswert ist. Für jeden hinzugefügten Artikel muss die entsprechende Kategoriegruppengebühr erhoben werden. Z.B. 2 Artikel der Kategorie Gruppe 15 € sollten 2 zusätzliche Gebühren hinzufügen, 3 Artikel der Kategorie Gruppe 50 € sollten 3 zusätzliche Gebühren hinzufügen und so weiter.

Gibt es einen Fehler im Code oder ...?

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 = ''); 
      } 
     } 
    } 
} 

Antwort

0

Sie müssen jeden Gebührenamen eindeutig machen.

Vom documentation:

$ name - (string) erforderlich - Eindeutiger Name für die Gebühr. Mehrere Gebühren mit demselben Namen können nicht hinzugefügt werden.

Dies wäre ein Weg, es zu tun:

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