Ogni tanto mi capita di dover lavorare con una grande quantità di dati, con molti ordini o molti prodotti o anche custom post type. E quindi cè un problema.
Avendo molti oggetti da gestire può capitare di voler andare ad aggiornare dei parametri per ogni singolo post. Ma se ne abbiamo 50.000 di post farlo a mano è quasi impossibile.
Per questo vediamo come fare per aggiornare prodotti o per esempio ordini usando WP e le sue funzioni di cronjob.
function aggiorna_prossimo_batch_cpt() { $offset = get_option('cpt_aggiornati_offset', 0); // Ottieni l'offset corrente $limit = 10; // Numero di cpt da aggiornare per ogni batch // Ottieni un blocco di 10 cpt $args = array( 'status' => 'any', // Puoi specificare lo status se necessario 'limit' => $limit, 'offset' => $offset, 'orderby' => 'date', 'order' => 'ASC', 'post_type' => 'tuo_post_type' ); $custom_cpt = get_posts($args); if (empty($custom_cpt)) { // Se non ci sono più cpt, resetta l'offset e interrompi il cron job delete_option('cpt_aggiornati_offset'); // Facoltativo invia una email a fine ciclo //wp_mail('[email protected]','WP Ciclo', 'Ciclo finito!'); wp_clear_scheduled_hook('aggiorna_cpt_batch_cron'); return; } foreach ($custom_cpt as $cpt) { $post_id = $cpt->get_id(); // QUI FUNZIONE custom che andrà a svolgere tutto il lavoro } // Incrementa l'offset per il prossimo batch $offset += $limit; update_option('cpt_aggiornati_offset', $offset); // Salva il nuovo offset } // Registra il cron job personalizzato (thirty_seconds = ogni 30 secondi) function registra_cron_job_aggiornamento_cpt() { if (!wp_next_scheduled('aggiorna_cpt_batch_cron')) { wp_schedule_event(time(), 'thirty_seconds', 'aggiorna_cpt_batch_cron'); } } add_action('wp', 'registra_cron_job_aggiornamento_cpt'); // Aggiungi l'azione per eseguire il batch di aggiornamento add_action('aggiorna_cpt_batch_cron', 'aggiorna_prossimo_batch_cpt'); // Intervallo di 30 secondi per il cron job add_filter('cron_schedules', function($schedules) { $schedules['thirty_seconds'] = array( 'interval' => 30, 'display' => __('Ogni 30 secondi') ); return $schedules; });
Sopra è tutto il meccanismo che serve per modificare ogni 30 secondi 10 custom post type o tutto quello che volete senza stressare il server.