WordPress Cron: Guida alla Programmazione delle Operazioni

Cos’è WP-Cron

WP-Cron è il sistema di scheduling interno di WordPress per eseguire compiti programmati. Non è un vero cron come il demone Unix, ma un sistema basato su visite: WP-Cron controlla la lista dei compiti programmati solo quando qualcuno visita il sito. Se nessuno visita alle 3:00, i compiti notturni vengono eseguiti al primo accesso del mattino. Questo approccio funziona per la maggior parte dei siti ma ha limitazioni per compiti critici con scadenze precise.

Come Funziona WP-Cron

WP-Cron memorizza i compiti programmati nell’opzione ‘cron’ del database (wp_options). Ad ogni richiesta, WordPress controlla se ci sono compiti da eseguire confrontando il timestamp programmato con il timestamp corrente. I compiti in scadenza vengono eseguiti uno alla volta. L’esecuzione avviene tramite una richiesta HTTP interna a wp-cron.php, che può essere disabilitata con define(‘DISABLE_WP_CRON’, true) se usi un cron di sistema.

Programmare Eventi con wp_schedule_event

wp_schedule_event() programma eventi ricorrenti. Parametri: timestamp di inizio, ricorrenza (hourly, twicedaily, daily), e hook. Esempio: wp_schedule_event(time(), ‘daily’, ‘my_daily_cleanup’). Puoi creare ricorrenze personalizzate con il filtro cron_schedules. Per eventi singoli, usa wp_schedule_single_event(). La funzione wp_next_scheduled() verifica se un evento è già programmato per evitare duplicati.

Eventi Standard di WordPress

WordPress ha eventi cron predefiniti: wp_scheduled_delete (svuota cestino ogni giorno), wp_scheduled_auto_draft_delete (elimina bozze automatiche dopo 7 giorni), wp_privacy_delete_old_export_files, e wp_version_check (controllo aggiornamenti due volte al giorno). Plugin e temi aggiungono i propri eventi. Puoi visualizzare tutti gli eventi programmati con plugin come WP Crontrol.

Performance e WP-Cron

WP-Cron può impattare le performance. Ogni richiesta controlla la lista cron nel database, anche quando non ci sono compiti. Su siti ad alto traffico, questo controllo costante può essere significativo. WP-Cron esegue i compiti in modo sincrono, potenzialmente rallentando la risposta al visitatore. La soluzione è disabilitare WP-Cron e usare un vero cron di sistema per chiamare wp-cron.php.

Cron di Sistema vs WP-Cron

Per siti critici, configura un vero cron nel server. In cPanel: aggiungi un cron job per wget -q -O – https://tuosito.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1. In server Linux: */15 * * * * wget -q -O – https://tuosito.com/wp-cron.php >/dev/null 2>&1. Poi disabilita WP-Cron in wp-config.php con define(‘DISABLE_WP_CRON’, true). Questo garantisce esecuzione puntuale senza impattare i visitatori.

Debugging dei Problemi Cron

I problemi comuni includono: eventi non eseguiti, duplicati, e conflitti tra plugin. WP Crontool mostra tutti gli eventi, il loro prossimo orario di esecuzione, e l’hook associato. Puoi eseguire manualmente un evento per test. Verifica che wp-cron.php sia accessibile (non bloccato da .htaccess o firewall). Controlla il debug.log per errori durante l’esecuzione degli hook cron.

Alternative a WP-Cron

Per compiti che richiedono esecuzione garantita, considera: Action Scheduler (usato da WooCommerce, gestisce code con retry), WP Background Processing per processi lunghi in background, o code asincrone con librerie come Pheanstalk (Beanstalkd). Questi sistemi separano la pianificazione dall’esecuzione, offrendo maggiore affidabilità e controllo rispetto a WP-Cron nativo.

Conclusione

WP-Cron è adeguato per la maggior parte dei siti WordPress, ma ha limitazioni per compiti critici. Per siti con traffico medio-basso, la configurazione predefinita funziona bene. Per siti ad alto traffico o compiti con scadenze precise, migra a un cron di sistema. Usa Action Scheduler per code di lavoro complesse, e monitora regolarmente gli eventi programmati con strumenti di debugging.

Leave a Reply

Your email address will not be published. Required fields are marked *