Get cart item name, quantity all details woocommerce

WordpressWoocommerce

Wordpress Problem Overview


I am trying to send the woocommerce cart items to third party shipping tool. I need the item name, quantity and individual price to be sent to the third party. How can this be achieved?

$items = $woocommerce->cart->get_cart();
  foreach($items as $item => $values) { 
   
   $_product = $values['data']->post; 
     echo $_product->post_title; 
} 

How do I get item name and quantity and price?

Wordpress Solutions


Solution 1 - Wordpress

Try this :

<?php
	global $woocommerce;
	$items = $woocommerce->cart->get_cart();

		foreach($items as $item => $values) { 
			$_product =  wc_get_product( $values['data']->get_id()); 
			echo "<b>".$_product->get_title().'</b>  <br> Quantity: '.$values['quantity'].'<br>'; 
			$price = get_post_meta($values['product_id'] , '_price', true);
			echo "  Price: ".$price."<br>";
		} 
?>

To get Product Image and Regular & Sale Price:

<?php
	global $woocommerce;
	$items = $woocommerce->cart->get_cart();

		foreach($items as $item => $values) { 
			$_product =  wc_get_product( $values['data']->get_id() );
			//product image
			$getProductDetail = wc_get_product( $values['product_id'] );
			echo $getProductDetail->get_image(); // accepts 2 arguments ( size, attr )
			
			echo "<b>".$_product->get_title() .'</b>  <br> Quantity: '.$values['quantity'].'<br>'; 
			$price = get_post_meta($values['product_id'] , '_price', true);
			echo "  Price: ".$price."<br>";
			/*Regular Price and Sale Price*/
			echo "Regular Price: ".get_post_meta($values['product_id'] , '_regular_price', true)."<br>";
			echo "Sale Price: ".get_post_meta($values['product_id'] , '_sale_price', true)."<br>";
		}
?>

Solution 2 - Wordpress

Since WooCommerce 2.1 (2014) you should use the WC function instead of the global. You can also call more appropriate functions:

foreach ( WC()->cart->get_cart() as $cart_item ) {
   $item_name = $cart_item['data']->get_title();
   $quantity = $cart_item['quantity'];
   $price = $cart_item['data']->get_price();
   ...

This will not only be clean code, but it will be better than accessing the post_meta directly because it will apply filters if necessary.

Solution 3 - Wordpress

Note on product price

> The price of the cart item may be different from that of the > product (stored in the database as post meta).

Some plugins or custom functions (added to the functions.php of the active theme) can change the price of the cart item.

If you want to be sure you get the price of the product added to the cart you will have to get it like this:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    // gets the cart item quantity
    $quantity           = $cart_item['quantity'];
    // gets the cart item subtotal
    $line_subtotal      = $cart_item['line_subtotal']; 
    $line_subtotal_tax  = $cart_item['line_subtotal_tax'];
    // gets the cart item total
    $line_total         = $cart_item['line_total'];
    $line_tax           = $cart_item['line_tax'];
    // unit price of the product
    $item_price         = $line_subtotal / $quantity;
    $item_tax           = $line_subtotal_tax / $quantity;

}

Instead of:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    // gets the product object
    $product            = $cart_item['data'];
    // gets the product prices
    $regular_price      = $product->get_regular_price();
    $sale_price         = $product->get_sale_price();
    $price              = $product->get_price();
}

Other data you can get:

foreach ( WC()->cart->get_cart() as $cart_item ) {

    // get the data of the cart item
    $product_id         = $cart_item['product_id'];
    $variation_id       = $cart_item['variation_id'];

    // gets the cart item quantity
    $quantity           = $cart_item['quantity'];
    // gets the cart item subtotal
    $line_subtotal      = $cart_item['line_subtotal']; 
    $line_subtotal_tax  = $cart_item['line_subtotal_tax'];
    // gets the cart item total
    $line_total         = $cart_item['line_total'];
    $line_tax           = $cart_item['line_tax'];
    // unit price of the product
    $item_price         = $line_subtotal / $quantity;
    $item_tax           = $line_subtotal_tax / $quantity;

    // gets the product object
    $product            = $cart_item['data'];
    // get the data of the product
    $sku                = $product->get_sku();
    $name               = $product->get_name();
    $regular_price      = $product->get_regular_price();
    $sale_price         = $product->get_sale_price();
    $price              = $product->get_price();
    $stock_qty          = $product->get_stock_quantity();
    // attributes
    $attributes         = $product->get_attributes();
    $attribute          = $product->get_attribute( 'pa_attribute-name' ); // // specific attribute eg. "pa_color"
    // custom meta
    $custom_meta        = $product->get_meta( '_custom_meta_key', true );
    // product categories
    $categories         = wc_get_product_category_list(  $product->get_id() ); // returns a string with all product categories separated by a comma
}

Solution 4 - Wordpress

This will show only Cart Items Count.

 global $woocommerce; 
    echo $woocommerce->cart->cart_contents_count;

Solution 5 - Wordpress

you can get the product name like this

foreach ( $cart_object->cart_contents as  $value ) {
        $_product     = apply_filters( 'woocommerce_cart_item_product', $value['data'] );
    
        if ( ! $_product->is_visible() ) {
                echo $_product->get_title();
        } else {
                echo $_product->get_title();
        }
        
         
     }

Solution 6 - Wordpress

Most of the time you want to get the IDs of the products in the cart so that you can make some comparison with some other logic - example settings in the backend.

In such a case you can extend the answer from @Rohil_PHPBeginner and return the IDs in an array as follows :

<?php 

    function njengah_get_ids_of_products_in_cart(){
    
    		global $woocommerce;
    
    		$productsInCart = array(); 
    		
    		$items = $woocommerce->cart->get_cart(); 
    		
    		foreach($items as $item => $values) { 
    		
    			$_product =  wc_get_product( $values['data']->get_id()); 
    			
    		   /* Display Cart Items Content  */ 
    		   
    			echo "<b>".$_product->get_title().'</b>  <br> Quantity: '.$values['quantity'].'<br>'; 
    			$price = get_post_meta($values['product_id'] , '_price', true);
    			echo "  Price: ".$price."<br>";
    			
    			/**Get IDs and in put them in an  Array**/ 
    			
    			$productsInCart_Ids[] =  $_product->get_id();
    		}
    	   
    	   /** To Display **/ 
    		  
    	   print_r($productsInCart_Ids);
    	   
    	   /**To Return for Comparision with some Other Logic**/ 
    	   
    	   return $productsInCart_Ids; 
    
    	}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPhilomathView Question on Stackoverflow
Solution 1 - WordpressRohil_PHPBeginnerView Answer on Stackoverflow
Solution 2 - WordpressJesús CarreraView Answer on Stackoverflow
Solution 3 - WordpressVincenzo Di GaetanoView Answer on Stackoverflow
Solution 4 - WordpressRashid WasimView Answer on Stackoverflow
Solution 5 - WordpressYasssine ELALAOUIView Answer on Stackoverflow
Solution 6 - WordpressNJENGAHView Answer on Stackoverflow