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!

PHP Snippet: Get WooCommerce Best Sellers From Last N Days
Usage
The function below can be customized as follows:
- change ‘-7 days‘ to whatever time length you require e.g. ‘-2 weeks‘, ‘-3 months‘, etc.
- change the “array_slice( $trending, 0, 10, true )” line to define the number of products you want e.g. “array_slice( $trending, 0, 3, true )” to get only 3
Then, place the shortcode [trending] wherever you like.
Code
/**
* @snippet Get Best Sellers Last week
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 9
* @community https://businessbloomer.com/club/
*/
add_shortcode( 'trending', 'bbloomer_product_sold_last_n_days' );
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',
)
);
if ( ! $all_orders ) return;
$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 do_shortcode( '[products ids="' . array_keys( array_slice( $trending, 0, 10, true ) ) . '"]' );
}
Hi there, i have copied and paste the whole code in the wordpress code snippet and activate it. And paste the shortcode : [products ids="' . bbloomer_product_sold_last_n_days() . '"] in the page using Elementor shortcode block. A list of product displayed but it is not the best seller in last 7 days.
I am not sure what went wrong and i have tried but still can’t get this code works. I hope with your assistance i can use this fantastic code! thank you!
I agree, the tutorial was confusing! I’ve now refactored the code, and you can use the [trending] shortcode to get the best sellers from the last 7 days. Feel free to edit the snippet in case you wish to change the date range or the number of products that are returned