1

Wp-cron è una categoria di funzioni di WordPress che permette di creare e gestire eventi unici o ricorrenti che verranno attivati dalle visite sul blog o, se si ha accesso alle impostazioni del server, da un Cron Job che punti al file wp-cron.php nella directory principale di WordPress.

Nel primo caso, il più comune, se impostiamo una determinata azione da compiersi il 01/01/2013, il primo visitatore dell’anno ne innescherà l’esecuzione. Altro punto importante da definire è che il processo non verrà eseguito all’interno dell’istanza del visitatore ma parallelamente, non rallentando quindi l’esperienza di navigazione.

Detto questo passiamo ad un esempio concreto… Diciamo che a 30 giorni dalla pubblicazione di un articolo, debba apparire in calce la dicitura: “Il seguente articolo non è stato aggiornato di recente”.

Tutte le funzioni per implementare un evento wp-cron si trovano a questa pagina, partendo da qui scopriamo che usando:

wp_schedule_single_event( time(), 'my_schedule_hook', array('params') );

possiamo registrare un evento che verrà eseguito a tempo debito, ma come agganciarlo alla pubblicazione del post? Possiamo sfruttare l’azione publish_post, che viene eseguita alla pubblicazione di un post, come segue. Prendiamo il nostro file functions.php e vi inseriamo:

// Associo l'azione alla mia funzione
add_action( 'publish_post', 'trigger_scadenza_post' );

function trigger_scadenza_post( $post_id ) {

    // Aggiungo un parametro al post per identificarlo come non scaduto
    update_post_meta( $post_id, 'post_scaduto', false );

    // Elimino eventuali scadenze precedenti associate al post ID
    wp_clear_scheduled_hook( 'action_scadenza_post', array( $post_id ) );

    // Schedulo un nuovo evento che verrà eseguito a 30gg da adesso
    wp_schedule_single_event( ( (int) time() + ( 30*24*60*60 ) ), 'action_scadenza_post', array( $post_id ) );

}

In questo modo verrà richiamata l’azione action_scadenza_post a 30 giorni dalla pubblicazione. Ora non resta che agganciare una funzione all’esecuzione dell’azione stessa:

// Associo la funzione scadenza_post all'esecuzione dell'azione
add_action( 'action_scadenza_post', 'scadenza_post', 0, 1);

function scadenza_post( $post_id ) {

    // Imposto il meta data post_scaduto come true
    update_post_meta( $post_id, 'post_scaduto', true);

}

Infine non mi resta che fare l’output agganciandomi al content del post.

// Aggancio l'output al content del post
add_filter( 'the_content', 'aggiungi_testo_scadenza' );

function aggiungi_testo_scadenza( $content ) {

    global $post; // Richiamo il post globale

    // Se si tratta di un post singolo e il post risulta scaduto
    if ( is_single( $post->ID ) && get_post_meta( $post->ID, 'post_scaduto', FALSE ) == true ) {

         // Faccio l'echo del messaggio
         return $content . '
' . __('Il seguente articolo non è stato aggiornato di recente.'); } // In caso contrario non faccio nulla return $content; }

Il codice riportato non è stato testato in produzione per cui se, adottandolo all’interno delle vostre pagine, doveste riscontrare degli errori non esitate a contattarmi, tramite i commenti, per perfezionarlo.

Nb. Potete visualizzare la lista degli eventi in coda usando l’ottimo plugin What’s in Cron? oppure il mio nuovo plugin WpDevTool.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *