Получить количество товаров в корзине по номеру товара в Woocommerce

В WooCommerce я создал мини-корзину и хочу получить количество товара, доступное в текущей корзине.

Как я уже пробовал это:

  $items = $woocommerce->cart->get_cart();

      foreach($items as $item => $values) {
          $product_id = $values['product_id'];
          if ( $product_id == $id ){
            $product_qnty = $values['quantity'];
          }
          break;
      }

Есть ли какая-то одна функция для получения количества товара в корзине?

1 ответ

Решение

Может быть, вам следует сначала поискать код шаблона woocommerce cart/mini-cart.php, где вы найдете официальный соответствующий код.

Примечание: "Идентификатор товара" доступен только в цикле товаров WC_Orders, но не в WC_Cart, который является "Ключом корзины". Так что вы наверняка говорите об идентификаторе продукта. Но если вы посмотрите на код официального шаблона cart/mini_cart, вам нужно будет использовать WC_Product объект вместо $product_id...

Таким образом, вы всегда можете создать пользовательскую функцию, как $productаргумент, объект WC_Product), который вы можете использовать в соответствующем коде шаблона или в своем пользовательском коде:

function get_item_qty( $product ){
    foreach( WC()->cart->get_cart() as $cart_item )
        // for variable products (product varations)
        $product_id = $product->get_parent_id();
        if( $product_id == 0 || empty( $product_id ) )
            $product_id = $product->get_id();

        if ( $product_id == $cart_item['product_id'] ){
            return $cart_item['quantity'];
            // break;
        }
    return;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.


ИСПОЛЬЗОВАНИЕ (пример): Здесь мы выведем количество $product( WC_Productобъект):

// Output the quantity based on the $product object
echo __('Quantity'). ': ' . get_item_qty( $product );

Официальная документация: структура шаблона + переопределение шаблонов через тему

Другие вопросы по тегам