Come funziona WordPress Cron
Pubblicato: 2021-12-03Ti sei mai chiesto cos'è WP-Cron? Se è così, allora questo è l'articolo perfetto per imparare tutto ciò che devi sapere sulle attività pianificate di WordPress.
Cron (Command Run On) è un'utilità avviata nei sistemi UNIX e successivamente evoluta sulle distribuzioni LINUX che è stata proposta come pianificatore di lavoro basato sul tempo.
Un lavoro cron è un'attività che viene eseguita ripetutamente o come attività una tantum. Nel corso degli anni è stato utilizzato principalmente come strumento di amministrazione del sistema per l'esecuzione automatica di attività.
WordPress Cron
Durante l'esecuzione di un sito Web WordPress, alcune attività vengono eseguite in background che devono essere eseguite periodicamente, come il controllo di aggiornamenti di temi e plug-in, post programmati, transitori da eliminare e molti altri. Queste attività pianificate basate sul tempo sono gestite da WP-Cron.
Nella tua installazione di WordPress, il file relativo ai lavori cron è il file wp-cron.php
, che si trova nella cartella principale della tua installazione.
Il file wp-cron.php contiene il codice per le attività automatizzate relative ad aggiornamenti e post.
Come funziona
Il WP-Cron controlla l'elenco delle attività su ogni caricamento della pagina ed esegue di conseguenza.
Se nel momento in cui la pagina viene caricata, un'attività è in scadenza, viene aggiunta in una coda. In questo modo WordPress garantisce che anche gli eventi dovuti vengano attivati e non saltati e alla fine tutte le attività verranno eseguite su quel caricamento della pagina.
È naturale se questo ti sembra irrazionale, ma pensa all'alternativa. In un ambiente di hosting condiviso, come nella maggior parte dei casi, dovresti avere accesso ai comandi del server per controllare queste attività come meglio credi, ma non sarebbe rischioso per il server?
Quindi, considera cosa fa WordPress come soluzione alternativa in questa situazione. Tuttavia, questo ha alcuni inconvenienti che esamineremo tra poco.
Il plug-in WP-Crontrol
Un ottimo e semplice modo per visualizzare l'elenco dei lavori cron nel tuo sito Web WordPress è installare il plug-in WP-Crontrol.
Dopo averlo attivato, puoi visualizzare la pagina di amministrazione del plugin sotto la voce di menu Strumenti->Cron Events. In un'installazione vanilla vedrai qualcosa del genere:
Se passi il mouse su ogni riga, noterai che sono disponibili azioni per modificare o eseguire qualsiasi evento.
Nella schermata di modifica dell'evento wp_update_themes, ad esempio, puoi modificarne le impostazioni
Nella voce di menu Impostazioni -> Pianificazioni Cron, puoi visualizzare le pianificazioni predefinite e, se lo desideri, aggiungerne una tua e assegnargli un nome da visualizzare nell'elenco.
Come creare un lavoro Cron
Per aggiungere manualmente un lavoro cron, tutto ciò che devi fare è modificare il file functions.php
del tema. Per dimostrare un semplice esempio, aprilo con il tuo editor preferito e aggiungi il seguente pezzo di codice:
add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }
Dove 'my_cronjob' è il nome del tuo hook e 'my_cronjob_function' è il nome della tua funzione che invierà semplicemente un'e-mail all'indirizzo che hai definito sostituendo EMAIL_ADDRESS con quello desiderato.
Successivamente, dobbiamo programmare questo hook in modo che venga eseguito nel tempo che vogliamo.
Come eseguire il lavoro una volta
Per eseguire l'azione come un lavoro WP-Cron una tantum, dobbiamo utilizzare la funzione integrata di WordPress wp_schedule_single_event() progettata per attivare un hook in un momento specifico. La sua struttura è così:
wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )
Dove $timestamp è il timestamp Unix per quando eseguire l'evento successivo e $hook è l'hook dell'azione da eseguire quando l'evento viene eseguito.
Entrambi questi parametri sono obbligatori. Ora parliamo dei parametri opzionali.
Con il parametro $args puoi usare un array contenente argomenti, per passare alla funzione di callback dell'hook. Ogni valore nell'array viene passato al callback come parametro individuale. Le chiavi dell'array vengono ignorate.
Il parametro $wp_error può essere utilizzato per restituire un errore WP_Error in caso di errore. Il suo valore predefinito è false.
Il codice corrispondente nel nostro file functions.php
sarebbe questo:
add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );
A questo punto dovresti essere in grado di vedere la tua attività personalizzata nell'elenco.
Come eseguire il lavoro come evento ricorrente
Ciò che WordPress fornisce per questo scenario è la funzione wp_schedule_event() che è strutturata in questo modo
wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)
Il parametro $timestamp è il timestamp Unix richiesto per quando eseguire l'evento successivo, $recurrence è una stringa richiesta anche per la frequenza con cui l'evento deve successivamente ripresentarsi e $hook è l'hook dell'azione da eseguire quando l'evento viene eseguito.
I parametri opzionali $args e $wp_error sono gli stessi di prima.
Il codice che esegue il lavoro con una ricorrenza di, diciamo, 1 ora è questo:
add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }
Abbiamo usato la funzione wp_next_scheduled() in un'istruzione 'if' come quella che vedi sopra, al fine di evitare eventi duplicati e garantire che l'attività non sia già pianificata prima di procedere ed eseguirla.
Abbiamo anche utilizzato l'etichetta "oraria" dalla tabella programmata in Impostazioni -> Pianificazioni Cron. Se volessimo un'occorrenza diversa, diciamo ogni 45 minuti, dovremmo prima creare una pianificazione Cron personalizzata denominata "45_minutes" e quindi utilizzarla nel codice.
add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }
A questo punto dovresti essere in grado di vedere la tua attività personalizzata nell'elenco con le modifiche previste:
Svantaggi di WP-Cron
Il modo in cui WordPress gestisce i lavori cron assicura che l'attività venga eseguita ma non ti consente di specificare quando perché, come abbiamo detto, il controllo viene eseguito quando un visitatore carica una pagina del tuo sito web.
Se trasmettiamo il controllo dei lavori cron sul tempo di visita degli utenti, è possibile che abbiamo un impatto negativo sul sito Web, indipendentemente dalle sue dimensioni o dalla sua popolarità.
Nel caso di un sito Web popolare, sperimenterai una grande quantità di traffico a causa dell'esecuzione simultanea di un gran numero di attività. Ciò potrebbe consumare le risorse del tuo server e influire sulle prestazioni o addirittura causare tempi di inattività del tuo sito web.
Nel caso di un piccolo sito Web, il che significa pochi visitatori, wp-cron non verrà attivato così spesso, quindi alcuni importanti processi cron potrebbero essere posticipati per un tempo sufficiente per creare effetti collaterali, come non eseguire backup sufficienti o ritardare l'aggiornamento di alcuni dati che vengono conteggiati su un lavoro cron.
Disabilita WP-Cron
Se il modo in cui WP-Cron gestisce i lavori cron non soddisfa i tuoi requisiti e hai bisogno che le attività vengano eseguite in tempo, allora dovresti disabilitare WP-Cron e utilizzare un servizio cron lato server.
Se la disabilitazione di WP-Cron non è un'opzione già fornita dal tuo provider di hosting, ecco come puoi farlo da solo.
Apri il file wp-config.php
, che si trova nella cartella principale della tua installazione, con il tuo editor preferito e trova le righe relative al prefisso della tabella del database. Subito dopo, inserisci questa riga:
// /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');
Questo è obbligatorio se si desidera utilizzare uno scheduler più stabile, come il servizio cron di Linux per attivare wp-cron.php ogni volta che si adatta meglio.
Una soluzione lato server: il servizio Cron di Linux
In Pressidium, utilizziamo Linux Crontab per attivare WP-Cron ogni 5 minuti. È la giusta quantità di tempo che garantisce che i tuoi lavori programmati vengano eseguiti in tempo e allo stesso tempo evita di sovraccaricare il tuo sito Web WordPress. Questo non interferisce con lo scheduler WP-Cron, ma solo con il meccanismo di attivazione.
Conclusione
Speriamo che questo articolo ti abbia aiutato a familiarizzare con WordPress Cron, cos'è e come funziona e come creare i tuoi programmi e attività. Pensaci due volte se WP-Cron è sufficiente per le tue esigenze, prima di scegliere altre soluzioni lato server.