Home » WooCommerce: Count User Purchases By Product ID (Shortcode)

WooCommerce: Count User Purchases By Product ID (Shortcode)

by Tutor Aspire

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 tutoraspire.com FREE
 * @author        Tutor Aspire
 * @compatible    WooCommerce 3.6.2
 * @donate $9     https://tutoraspire.com
 */

// SHORTCODE SYNTAX: [product_purchases id="123"]
 
add_shortcode( 'product_purchases', 'tutoraspire_user_logged_in_product_bought' );
 
function tutoraspire_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 'You purchased: ' . $count . ' items';

}

You may also like