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. |