Add product total sales counter column to admin products list in WooCommerce

/**
 * Add new "Total Sales" column to the products list.
 */
add_filter( 'manage_edit-product_columns', 'wpcb_add_product_column_total_sales', PHP_INT_MAX );
function wpcb_add_product_column_total_sales( $columns ) {
	$columns['total_sales'] = 'Total Sales';
	return $columns;
}
/**
 * Output "Total Sales" column.
 */
add_action( 'manage_product_posts_custom_column', 'wpcb_render_product_column_total_sales', PHP_INT_MAX );
function wpcb_render_product_column_total_sales( $column ) {
	if ( 'total_sales' === $column ) {
		$total_sales = get_post_meta( get_the_ID(), 'total_sales', true );
		echo $total_sales;
	}
}

/**
 * This is only needed if you want to make the column sortable.
 */
add_filter( 'manage_edit-product_sortable_columns', 'wpcb_sortable_column_total_sales', PHP_INT_MAX );
function wpcb_sortable_column_total_sales( $columns ) {
	$columns['total_sales'] = 'total_sales';
	return $columns;
}
add_action( 'pre_get_posts', 'wpcb_sort_by_total_sales_column', PHP_INT_MAX );
function wpcb_sort_by_total_sales_column( $query ) {
	if (
		$query->is_main_query() &&
		( $orderby = $query->get( 'orderby' ) ) && 'total_sales' === $orderby &&
		isset( $query->query['post_type'] ) && 'product' === $query->query['post_type'] &&
		isset( $query->is_admin ) && 1 == $query->is_admin
	) {
		$query->set( 'orderby',  'meta_value_num' );
		$query->set( 'meta_key', 'total_sales' );
	}
}

2 thoughts on “Add product total sales counter column to admin products list in WooCommerce”

Leave a Comment