wc_scheduled_sales()
Function which handles the start and end of scheduled sales via cron.
Hooks from the function
Returns
null. Nothing (null).
Usage
wc_scheduled_sales();
wc_scheduled_sales() wc scheduled sales code WC 10.3.3
function wc_scheduled_sales() {
$data_store = WC_Data_Store::load( 'product' );
$product_util = wc_get_container()->get( ProductUtil::class );
$must_refresh_transient = false;
// Sales which are due to start.
$product_ids = $data_store->get_starting_sales();
if ( $product_ids ) {
$must_refresh_transient = true;
do_action( 'wc_before_products_starting_sales', $product_ids );
foreach ( $product_ids as $product_id ) {
$product = wc_get_product( $product_id );
if ( $product ) {
$sale_price = $product->get_sale_price();
if ( $sale_price ) {
$product->set_price( $sale_price );
$product->set_date_on_sale_from( '' );
} else {
$product->set_date_on_sale_to( '' );
$product->set_date_on_sale_from( '' );
}
$product->save();
}
$product_util->delete_product_specific_transients( $product ? $product : $product_id );
}
do_action( 'wc_after_products_starting_sales', $product_ids );
delete_transient( 'wc_products_onsale' );
}
// Sales which are due to end.
$product_ids = $data_store->get_ending_sales();
if ( $product_ids ) {
$must_refresh_transient = true;
do_action( 'wc_before_products_ending_sales', $product_ids );
foreach ( $product_ids as $product_id ) {
$product = wc_get_product( $product_id );
if ( $product ) {
$regular_price = $product->get_regular_price();
$product->set_price( $regular_price );
$product->set_sale_price( '' );
$product->set_date_on_sale_to( '' );
$product->set_date_on_sale_from( '' );
$product->save();
}
$product_util->delete_product_specific_transients( $product ? $product : $product_id );
}
do_action( 'wc_after_products_ending_sales', $product_ids );
delete_transient( 'wc_products_onsale' );
}
if ( $must_refresh_transient ) {
// Kept for compatibility, WooCommerce core doesn't use product transient versions anymore.
WC_Cache_Helper::get_transient_version( 'product', true );
}
}