Menu Close

WooCommerce: Count Variation Sales (Shortcode)

default

We’ve already studied how to display the number of sales for a given product ID via a shortcode – however that solution won’t work for a variation ID, because WooCommerce only counts the “parent product” sales.

We need a different workaround in this case. This will require we either query the orders that contain such variation ID, and then calculate the sum – or that we install a snippet on day 0 so that we can count variation sales from that moment onwards, without having to query and calculate anything.

We will study the latter, and then display the result via a shortcode, so that you can use it anywhere, even inside the variation description.

Enjoy!

In this simulation, with the code below I’ve been able to display the number of total sales for a single variation inside the variation description.

PHP Snippet: Shortcode to Display The Total Sales by Variation ID

/**
 * @snippet       Variation Sales Counter
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

// PART 1: variation sales counter
// This needs to be installed on day 0
// There is also a way to make it retroactive with a one-off operation of course

add_action( 'woocommerce_recorded_sales', 'bbloomer_maybe_update_variation_sales' );

function bbloomer_maybe_update_variation_sales( $order_id ) {
   $order = wc_get_order( $order_id );
	if ( ! $order ) return;
	if ( count( $order->get_items() ) > 0 ) {
		foreach ( $order->get_items() as $item ) {
			if ( 'product_variation' === get_post_type( $item->get_variation_id() ) ) {
            $variation_id = $item->get_variation_id();
            $total_sales = get_post_meta( $variation_id, '_total_sales', true ) ? get_post_meta( $variation_id, '_total_sales', true ) : 0;
            update_post_meta( $variation_id, '_total_sales', $total_sales + absint( $item->get_quantity() ) );
         }
      }
   }
}

// PART 2: variation sales shortcode
// usage: [var_sales id="123"]

add_shortcode( 'var_sales', 'bbloomer_sales_by_variation_id' );

function bbloomer_sales_by_variation_id( $atts ) {
	return get_post_meta( $atts['id'], '_total_sales', true ) ? get_post_meta( $atts['id'], '_total_sales', true ) : 0;
}
View Source
Posted in WooCommerce Tips