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
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 “$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() . '"]' );
*/