Menu Close

WooCommerce: Get “Trending” Products

default

There is a way to display the WooCommerce bestsellers via shortcode / block, but there is no way to calculate the bestsellers – say – from the last 7 days i.e. a list of “trending” products over the last N days.

The function below gives you a way to loop through the latest orders and fill an array with the top 10 products – you can then pass this list of IDs to a shortcode to display them wherever you wish. Enjoy!

After calculating the best sellers from the last 7 days, I’ve used the shortcode below to display them on a custom page! Neat!

PHP Snippet: Get WooCommerce Best Sellers From Last N Days

The function below can be customized as follows:

  1. change ‘-7 days’ to whatever time length you require e.g. ‘-2 weeks’, ‘-3 months’ etc.
  2. change the “$trending, 0, 10” line to define the number of products you want e.g. “$trending, 0, 3” to get only 3
/**
 * @snippet       Get Best Sellers Last week
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

function bbloomer_product_sold_last_n_days() {
	$all_orders = wc_get_orders(
		array(
			'limit' => -1,
			'status' => array_map( 'wc_get_order_status_name', wc_get_is_paid_statuses() ),
			'date_after' => date( 'Y-m-d', strtotime( '-7 days' ) ),
			'return' => 'ids',
		)
	);
	$trending = array();
	foreach ( $all_orders as $all_order ) {
		$order = wc_get_order( $all_order );
		$items = $order->get_items();
		foreach ( $items as $item ) {
			$product_id = $item->get_product_id();
			if ( ! $product_id ) continue;
			$trending[$product_id] = $trending[$product_id] ? (int) $trending[$product_id] + $item['qty'] : $item['qty'];
		}
	}
	arsort( $trending, SORT_NUMERIC );
	return array_keys( array_slice( $trending, 0, 10, true ) );
}

/* 

Once you have the function active, you can then use a WooCommerce shortcode to display products e.g.:

echo do_shortcode( '[products ids="' . bbloomer_product_sold_last_n_days() . '"]' );

*/
View Source
Posted in WooCommerce Tips