2016-12-07 3 views
3

Ich versuche, die Anzahl der Artikel im Warenkorb nur aus einer bestimmten Produktkategorie in WooCommerce zu bekommen.Zählen Warenkorb-Artikel bestimmter Produktkategorie

Ich mache eine Website für ein Weingut. Es hat alkoholische und alkoholfreie Produkte. Der gesamte Wein fällt unter die Hauptkategorie "Wein" oder Kategorie ID 34, mit vielen Unterkategorien und Produkten darunter.

Für alle Dinge, die unter diese Kategorie fallen ... Ich muss wissen, wie viele Artikel im Warenkorb in dieser Kategorie sind. Wenn es sechs Flaschen Wein gibt, egal, ob es sich um die gleiche Produkt-ID oder um sechs verschiedene Produkt-IDs handelt. Ich muss diese Zahl von 6 aus der Kategorie "Wein" oder Kategorie ID 34 erhalten.

Ich versuchte dies mit keinem Erfolg.

Ich bin sehr neu in WooCommerce und ein wenig neu in Object Oriented.

Dank

function cat_cart_count($cat_name) { 

// $cat_name variable is for you normally "tshirts" or "shorts" 

global $woocommerce; $cat_count = 0; 

// For each product in the cart 
foreach(WC()->cart->get_cart() as $cart_item_key => $values) { 
    $_product_id = $values['product_id']; // product ID 
    $_product_qty = $values['quantity']; // product quantity 

    // Getting categories of the product (could be more than one) 
    $terms = get_the_terms($_product_id, 'product_cat'); 

    // Checking this product has a category 
    if ($terms && ! is_wp_error($terms)) { 
     $term_name = array(); 

     // For each category of that product 
     foreach($terms as $term) { 

      // Adding the category name to an array 
      $term_name[] = $term->name; 

      // if the product has $cat_name category 
      if (in_array($cat_name, $term_name)) { 

       // add 1 x product quantity to the count 
       $cat_count =+ 1 * $_product_qty; 
      } 
     } 
    } 
} 

Antwort

6

Die Wordpress bedingte Funktion has_term() akzeptiert Kategorie-ID, Butzen, Name oder ein Array anpassen dieser Werte.

Das ist also der kürzere und einfachere Weg, es zu tun. Ihr Code wird viel kompakter und leichter. Und Sie können direkt Ihre Kategorie ID verwenden.

Hier ist Ihre Funktion:

function cat_cart_count($cat_name) { 
    $cat_count = 0; 

    // Iterating through each cart item 
    foreach(WC()->cart->get_cart() as $cart_item) 
     if(has_term($cat_name, 'product_cat', $cart_item['product_id'])) 
      $cat_count += $cart_item['quantity']; 

    return $cat_count; 
} 

Dieser Code ist getestet und voll funktionsfähig.

Verwendung Ihrer Funktion zum Beispiel unter Verwendung von echo den Wert anzuzeigen für 34 Kategorie ID:

echo cat_cart_count(34); 
+0

Das hat wunderbar funktioniert. Vielen Dank. –

0

versuchen diese ich diesen Code aus dem Internet kopiert oder Aktualisierungen Fall

function check_product_in_cart() { 
     global $woocommerce; 
      // id of targeted category is 5 for example 

     $product_count = 0; 

     // start of the loop that fetches the cart items 

     foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
      $_product = $values['data']; 
      $terms = get_the_terms($_product->id, 'product_cat'); 

      // second level loop search, in case some items have several categories 
      foreach ($terms as $term) { 
       $_categoryid = $term->term_id; 
       if (($_categoryid === 5) { 

        $product_count=+ 1 * $_product_qty; ; 
       } 
      } 
     } 

     return $product_count; 
    } 
+0

Dank für die Beantwortung. Muss die Kategorie ID in die Klammern dieses check_product_in_cart() gehen? –

+0

Wenn Sie es dynamisch machen wollen, deklarieren Sie einfach eine Methode wie diese check_product_in_cart ($ cat_id) und ersetzen Sie die Nummer 5, die sich in der Methode befindet mit $ cat_id. und schreiben check_product_in_cart (5), wo Sie die Methode verwenden müssen. –

Verwandte Themen