Счетная корзина - товары определенной категории товаров


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

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

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

Я пытался это сделать, но безуспешно.

Я очень новичок в WooCommerce и немного новичок в объектно-ориентированном.

Спасибо

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;
            }
        }
    }
}
Author: LoicTheAztec, 2016-12-07

2 answers

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

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

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

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 идентификатор категории:

echo cat_cart_count( 34 );
 7
Author: LoicTheAztec, 2016-12-07 20:52:23

Попробуйте это Я скопировал этот код из Интернета и внес обновления в соответствии с вашим случаем

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
Author: Yahya Hussein, 2016-12-07 19:45:46