'How to auto draft WooCommerce product on specific date?

I have a custom date field, added with ACF, for each of my products at which point the product status should change to draft.

I know there are a bunch of schedular and count time plugins, but it comes with a bell and whistle I don't need. Is there a simple way to achieve this

Thank you



Solution 1:[1]

You can use WorsPress CRON. You can use wp_schedule_event. You have to get all products and get your ACF field to compare against today or current date then use the wp_update_post function to update posts status. try the below code.

// Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'check_daily_for_change_product_status' ) ) {
    wp_schedule_event( time(), 'daily', 'check_daily_for_change_product_status' );
}

// Hook into that action that'll fire every three minutes
add_action( 'check_daily_for_change_product_status', 'check_daily_for_change_product_status_func' );
function check_daily_for_change_product_status_func() {
    
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'post_status'    => 'publish'
    );

    $get_products = new WP_Query( $args );

    if( $get_products->have_posts() ){ while ( $get_products->have_posts() ) { $get_products->the_post();

        $draft_date   = strtotime( get_field('keyname', get_the_ID() ) );
        $current_date = time();

        if( $current_date >= $draft_date ){
            $my_post = array(
                'ID'           => get_the_ID(),
                'post_status'  => 'draft',
            );
            wp_update_post( $my_post );
        }
        
    } wp_reset_postdata(); }

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Bhautik