Rendere automatico WordPress: i Cron

Immagine originale tratta da Fotolia
Tempo stimato di lettura: 4 minuti, 39 secondi
Pubblicato il 18 Marzo 2015

Se gestite un sito in WordPress, tra le tante possibilità che vi vengono offerte vi è quella di automatizzarlo (solo per certi aspetti, s’intende: la scrittura dei post non è tra queste, se servisse dirlo). Le schedule di WordPress sono utili per automatizzare operazioni ad intervalli di tempo regolari, mediante script PHP.

Alcune di esse sono già note nell’interfaccia, ad esempio quando decidiamo di pubblicare un articolo ogni certa ora e/o giorno: quelle di cui parlerò qui ne sono una forma semplificata, e come vedremo si adattano a qualsiasi altro compito (o quasi).

Cosa sono le schedule di WordPress?

È il caso, per capirci meglio, di uno script che, ad esempio:

  • verifichi ogni 12 ore l’andamento in borsa di un titolo, un tasso di cambio o una posizione geografica;
  • effettui un aggiornamento qualsiasi;
  • ricarichi ogni ora, in automatico, i dati mostrati su una pagina, ad es. caricando quelli più aggiornati da una fonte esterna;
  • faccia un backup completo del sito ogni settimana;
  • invii ogni mese una email preimpostata ad un gruppo di utenti.

Detta in modo un po’ più tecnico, si tratta di una forma alleggerita di cron presente nei sistemi Linux (crontab), meccanismo utile per far scattare un’operazione, o un insieme di esse, ogni X minuti, secondi, ore, giorni e così via.

Per vedere materialmente la tabella delle operazioni schedulate da WP, visto che sono informazioni di sistema non visibili (salvo permessi particolari di sistema), ci verranno in aiuto appositi plugin per lavorare con le schedule (o cron).

Due plugin utili: Advanced Cron Manager e WP Crontrol

Installando uno dei tanti plugin – come quelli appena citati – per monitorare i cron in WordPress, potremo vedere nella nostra interfaccia backend una tabella con tutti i processi automatizzati attivi, identificati da:

  • un nome univoco;
  • una frequenza di aggiornamento.

Per fare dei test e in fase di allestimento/debug, funzionano benone alla prova dei fatti: fate attenzione, comunque, perchè quelli aggiornati meno di recente potrebbero, almeno in teoria, spalancare falle di sicurezza nel vostro sito. Tenete conto che con questi plugin è normalmente possibile vedere, modificare e rimuovere i cron che non vi servono più – per la cronaca, quelli di sistema non toccateli.

Esempi di schedulazione con WP

Per automatizzare il vostro WordPress, e fargli eseguire delle operazioni a scadenza prefissata, la funzione da sfruttare è wp_schedule_event: essa richiede quattro parametri, ovvero ($timestamp, $recurrence, $hook, $args), ognuno dei quali specifica quando iniziare, ogni quanto ripetere, cosa eseguire e quali parametri opzionali allegare alla richiesta.

Un esempio base che potete includere, adattandolo, nel file functions.php del vostro theme child, è questo:

// inizializza il cron di WP
add_action('init', 'funzione_init');
 
// legame (binding) tra hook e funzione
add_action('funzione_da_eseguire', 'funzione_da_eseguire_1' );

function funzione_init() {
    // inizio: se non è stata schedulata, fallo ora
    if( !wp_next_scheduled( 'funzione_da_eseguire' ) ) {
        wp_schedule_event( time(), 'hourly', 'funzione_da_eseguire' );
    }
}

function funzione_da_eseguire_1() {
 [...] // qui ci va il codice che eseguiremo
}

Poche note a riguardo per capirci:

  1. dobbiamo inizializzare la procedura con un hook di init (degli hook ho parlato qualche tempo fa, se ricordate);
  2. poi sfruttiamo la funzione wp_next_scheduled per caricare lo script solo una volta;
  3. mettiamo ora in coda nel sistema il cron a partire da oggi (parametro time()) ogni ore (hourly, ma avremmo potuto inserire due volte al giorno, twicedaily, o una volta al giorno, daily) richiamando un hook apposito (funzione_da_eseguire);
  4. infine, creiamo un hook legato alla funzione che vorremo eseguire periodicamente (funzione_da_eseguire_1)

Potrebbe sembrare complicato ma, alla prova dei fatti, è solo un template che potrete adattare alle vostre necessità, per richiamare più funzioni al posto di una e così via. Con uno dei plugin citati all’inizio, troverete in lista un nuovo elemento denominato funzione_da_eseguire_1, che corrisponderà all’automatismo che abbiamo appena definito.

Una cosa importante da ricordare

Tenete conto che i cron di WordPress non funzionano col “pilota automatico”: può capitare infatti che un cron attivo non si inneschi, mettendo a dura prova i vostri neuroni. Questo dipende dal fatto che sono fatti funzionare dal traffico sul sito: per attivarli, dovrete sempre aggiornare la pagina del sito, e se non arriverà alcuna visita, in quel periodo non succederà nulla.

Tra l’altro, dovete ricordarvi che la frequenza delle azioni deve essere stabilita sulla base della reale necessità: il rischio, diversamente, è sempre quello di attivare le schedule meno volte di quanto sia impostato.

Cosa possiamo fare con i cron di WP?

Di recente ne ho sfruttato uno al fine di creare una pagina auto-aggiornata contenente informazioni su domini in stato expired o scaduti, che vengono periodicamente inseriti nel database e filtrati in una tabella, con annesse informazioni di WHOIS. Il modo più semplice per realizzare una cosa che sarebbe stata molto complessa, diversamente.

Attenzione a non esagerare!

Ho tarato i cron perchè non venissero eseguiti “troppe volte” al giorno, visto che l’acquisizione di un singolo dato è un’operazione onerosa per il server (nel mio caso coinvolge due API che impiegano un paio di secondi in media a finire il lavoro). Esagerare con i cron, rendendoli troppo frequenti, avrebbe rischiato di bloccare o di rallentare l’ordinaria consultazione del sito. Le frequenze sono anche impostabili in modo personalizzato (ogni 3 o 7 ore, tanto per dire), ma il mio suggerimento è quello di usare le impostazioni predefinite.

Fate sempre molta attenzione a bilanciare questo aspetto, perchè un eccesso di cron pesanti può creare problemi al vostro server.

I cron si possono attivare anche con una seconda modalità (una HTTP request triggerata sul file wp-cron.php), un po’ più precisa e complicata di quella vista: in caso, ne riparleremo. Attendo le vostre nei commenti!

Shares