If you’re developing custom landing pages or sections dedicated to logged in customers, knowing the quantity purchased of a certain product ID might come useful.

We already saw how to detect whether a logged in customer has purchased a given product, as well as a snippet to return all products purchased by a specific user – but this time I want to “count” how many times a current user has purchased a product ID, and return this on the screen via a shortcode.

From this snippet you can learn lots of things, for example how to create custom shortcodes, how to get customer orders, and how to set up a foreach loop in PHP. Either way, enjoy!

Count how many times a WooCommerce product ID was purchased by current logged in customer

PHP Snippet: Count How Many Times a Product ID Was Purchased by Current User (WooCommerce Shortcode)

/**
 * @snippet       Count Product ID Purchases - WooCommerce Shortcode
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 3.6.2
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

// SHORTCODE SYNTAX: [product_purchases id="123"]
 
add_shortcode( 'product_purchases', 'bbloomer_user_logged_in_product_bought' );
 
function bbloomer_user_logged_in_product_bought( $atts ) {
	
	// GET PRODUCT ID FROM SHORTCODE
	$atts = shortcode_atts( array(
        'id' => '0'
    ), $atts );
	
	// GET CURRENT USER ORDERS
	$current_user = wp_get_current_user();	
	$customer_orders = wc_get_orders(
		array(
			'limit'    => -1,
			'status'   => array( 'completed', 'processing'),
			'customer' => get_current_user_id(),
		)
	);
	
	// LOOP THROUGH ORDERS AND SUM QUANTITIES PURCHASED
	$count = 0;
	foreach ( $customer_orders as $customer_order ) {
		$order = wc_get_order( $customer_order->get_id() );
		$items = $order->get_items();
		foreach ( $items as $item ) {
			$product_id = $item->get_product_id();
			if ( $product_id == $atts['id'] ) {
				$count = $count + absint( $item['qty'] ); 
			}
		}
	}
	
	// RETURN HTML
	return '<b>You purchased: ' . $count . ' items</b>';
	
}
Share:

Leave a Reply