WC_Product_Data_Store_CPT::update_product_sales( int $product_id, int|null $quantity = null, string $operation = 'set' )
Update a product’s sale count directly.
Description Description
Uses queries rather than update_post_meta so we can do this in one query for performance.
Parameters Parameters
- $product_id
-
(Required) Product ID.
- $quantity
-
(Optional) Quantity.
Default value: null
- $operation
-
(Optional) set, increase and decrease.
Default value: 'set'
Source Source
File: includes/data-stores/class-wc-product-data-store-cpt.php
public function update_product_sales( $product_id, $quantity = null, $operation = 'set' ) {
global $wpdb;
add_post_meta( $product_id, 'total_sales', 0, true );
// Update stock in DB directly.
switch ( $operation ) {
case 'increase':
// phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
$wpdb->query(
$wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = meta_value + %f WHERE post_id = %d AND meta_key='total_sales'",
$quantity,
$product_id
)
);
break;
case 'decrease':
// phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
$wpdb->query(
$wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = meta_value - %f WHERE post_id = %d AND meta_key='total_sales'",
$quantity,
$product_id
)
);
break;
default:
// phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
$wpdb->query(
$wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = %f WHERE post_id = %d AND meta_key='total_sales'",
$quantity,
$product_id
)
);
break;
}
wp_cache_delete( $product_id, 'post_meta' );
$this->update_lookup_table( $product_id, 'wc_product_meta_lookup' );
/**
* Fire an action for this direct update so it can be detected by other code.
*
* @since 3.6
* @param int $product_id Product ID that was updated directly.
*/
do_action( 'woocommerce_updated_product_sales', $product_id );
}
Changelog Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |