WordPress ha un sistema di pianificazione integrato chiamato WP-Cron che ti permette di eseguire attività a intervalli specifici. Nonostante il nome, WP-Cron non è un vero cron job. Comprendere la differenza — e i limiti — è essenziale per costruire attività pianificate affidabili nei tuoi plugin.
Questa guida copre tutto ciò che devi sapere sui cron job di WordPress: come funzionano, quando usarli, le trappole più comuni e come sostituire WP-Cron con un cron di sistema reale per ottenere affidabilità.
Come Funziona WP-Cron (e Perché È Diverso)
Un vero cron job di sistema viene eseguito a un'ora specifica, indipendentemente dal fatto che qualcuno visiti il sito. WP-Cron funziona in modo diverso: controlla la pianificazione solo quando qualcuno visita il sito. Se un'attività è programmata per le 3:00 e nessuno visita il sito fino alle 9:00, l'attività viene eseguita alle 9:00.
Questo comportamento va bene per i siti a basso traffico dove i tempi non sono critici. Ma per i siti che devono eseguire attività in momenti precisi — come l'invio di email pianificate o l'elaborazione di pagamenti ricorrenti — la valutazione pigra di WP-Cron può causare problemi.
Pianificare Attività con wp_schedule_event
La funzione principale per pianificare attività ricorrenti è wp_schedule_event(). Accetta tre parametri: un timestamp per la prima esecuzione, un intervallo di ricorrenza e il nome di un hook da eseguire. L'hook deve corrispondere a un'azione registrata con add_action().
Controlla sempre se l'evento è già pianificato prima di chiamare wp_schedule_event(). Usa wp_next_scheduled() per verificare le pianificazioni esistenti. Pianifica gli eventi all'attivazione del plugin con register_activation_hook() e fai pulizia alla disattivazione con register_deactivation_hook().
Intervalli di Ricorrenza Personalizzati
WordPress offre quattro intervalli di ricorrenza integrati: orario, due volte al giorno, giornaliero e settimanale. Se ti serve un intervallo diverso, usa il filtro cron_schedules per registrare una pianificazione personalizzata. Fornisci un array con un intervallo in secondi e un nome visualizzato per l'amministrazione di WordPress.
Le pianificazioni personalizzate sono utili per attività come l'invio di email di riepilogo settimanali, la pulizia dei dati scaduti ogni 6 ore o il controllo degli aggiornamenti ogni 5 minuti per funzionalità in tempo reale.
Eventi Singoli con wp_schedule_single_event
Per attività che vengono eseguite una sola volta in un momento specifico, usa wp_schedule_single_event(). È utile per azioni ritardate come l'invio di un'email di promemoria 24 ore dopo la registrazione di un utente o l'elaborazione di un rimborso 7 giorni dopo un acquisto se non viene richiesta la restituzione.
Gli eventi singoli sono memorizzati nella tabella wp_options con un timestamp. Quando il timestamp passa e qualcuno visita il sito, l'attività viene eseguita e l'evento viene rimosso automaticamente dalla pianificazione.
Attività di Lunga Durata e Prestazioni
WP-Cron viene eseguito inline con le richieste delle pagine. Se un'attività cron impiega 30 secondi per completarsi, il visitatore la cui richiesta l'ha attivata aspetterà 30 secondi per il caricamento della pagina. Questo è inaccettabile per attività di lunga durata come campagne email, elaborazione di immagini o esportazione di dati.
Per attività di lunga durata, usa wp_remote_post() per attivare una richiesta HTTP separata che esegue l'attività in modo asincrono. Invia una richiesta a un URL speciale del tuo sito con una chiave segreta per l'autenticazione. L'attività viene eseguita in un processo separato e il caricamento della pagina del visitatore non viene influenzato.
Sostituire WP-Cron con il Cron di Sistema
Per i siti che necessitano di una pianificazione affidabile, sostituisci WP-Cron con un vero cron job di sistema. Disabilita WP-Cron aggiungendo define('DISABLE_WP_CRON', true) a wp-config.php. Poi configura un cron job di sistema sul tuo server che chiama wp-cron.php all'intervallo desiderato.
Un job cron di sistema tipico viene eseguito ogni 5 minuti e chiama il file cron di WordPress: curl -s https://yoursite.com/wp-cron.php > /dev/null 2>&1. Questo fornisce un comportamento cron reale — le attività vengono eseguite esattamente quando sono programmate, indipendentemente dal traffico del sito. Migliora anche le prestazioni per i visitatori perché WP-Cron non viene controllato a ogni caricamento di pagina.
Debug dei Problemi Cron
I problemi cron possono essere difficili da debuggare perché avvengono in background. Usa WP-CLI per elencare gli eventi pianificati con wp cron event list. Controlla gli eventi mancati con wp cron event run --all. Abilita il logging WP_DEBUG per catturare gli errori legati al cron. Usa plugin come WP Crontrol o Advanced Cron Manager per visualizzare e gestire le pianificazioni cron dal pannello di amministrazione.
I problemi cron più comuni includono: eventi non pianificati a causa di un hook di attivazione che non scatta, eventi eseguiti più volte a causa di race condition ed eventi che falliscono in silenzio a causa di errori PHP. Ognuno di questi ha approcci di debug specifici che possono aiutarti a identificare la causa principale.
Il punto fondamentale
WP-Cron è un potente sistema per pianificare attività in WordPress, ma ha limiti che devi comprendere. Usalo per attività brevi e frequenti dove i tempi esatti non sono critici. Sostituiscilo con un cron di sistema reale per attività che devono essere eseguite in momenti precisi. Gestisci sempre gli errori con eleganza e registra i fallimenti per il debug. Con l'approccio giusto, le attività cron possono automatizzare in modo affidabile i processi in background più importanti del tuo plugin.




