2016-12-07 8 views
3

Я пытаюсь получить количество товаров в корзине только из определенной категории товаров в WooCommerce.Подсчет товарных позиций определенной категории

Я делаю сайт для винодельни. Он имеет алкогольную и безалкогольную продукцию. Все вина попадают под главную категорию «вино» или категории 34, со многими подкатегориями и продуктами под ними.

Для любой вещи, подпадающей под эту категорию ... Мне нужно знать, сколько предметов находится в корзине под этой категорией. Если есть шесть бутылок вина, независимо от того, являются ли они одинаковыми идентификаторами продукта или 6 различными идентификаторами продукта. Мне нужно получить это число 6 из категории «вино» или идентификатор категории 34.

Я пробовал это без успеха.

Я очень новичок в WooCommerce и немного новичок в Object Oriented.

Благодаря

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; 
      } 
     } 
    } 
} 

ответ

6

Wordpress условная функция has_term() принимает идентификатор категории, слизняка, имя или массив от этих значений.

Так что это более короткий и простой способ сделать это. Ваш код будет намного компактнее и легче. И вы можете напрямую использовать свою категорию ID .

Вот ваша функция:

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; 
} 

Этот код проверен и полностью работоспособен.

Использования вашей функции, используя, например echo для отображения значения для 34 категории ID:

echo cat_cart_count(34); 
+0

Это сработало красиво. Спасибо. –

0

попробовать это я скопировал этот код из Интернета и сделал обновления, чтобы удовлетворить ваше дело

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

Спасибо за реагирование. Нужен ли идентификатор категории в круглых скобках этой проверки_product_in_cart()? –

+0

, если вы хотите сделать его динамическим, просто объявите метод, как this check_product_in_cart ($ cat_id), и замените номер 5, который находится внутри метода, с помощью $ cat_id. и напишите check_product_in_cart (5), где вам нужно использовать этот метод. –

 Смежные вопросы

  • Нет связанных вопросов^_^