Crear un Cron en WordPress

De iNeet
Saltar a: navegación, buscar

Para añadir un Cron o proceso que se ejecuta periódicamente a nuestra página desarrollada con WordPress debemos hacer lo siguiente:

Crear el Cron

El Cron se crea usando la siguiente función:

if ( !wp_next_scheduled('mi_hook') ) {

  wp_schedule_event( time(), 'daily', 'mi_hook' );

}

La variable $timestamp contiene la fecha en la que queremos que el evento ocurra por primera vez, $recurrencia puede tomar 3 valores: hourly (cada hora), twicedaily (dos veces al dia) o daily (diariamente), $hook contiene el nombre del hook de WordPress que lanzará el evento, y por último la variable $args (la única opcional) contendrá los argumentos que le podremos pasar al hook.

Crear la función del Cron

El siguiente paso es crear la función que debe lanzar el Cron e indicarle la periodicidad de la misma.

En el ejemplo el Cron nos manda un mail cada día

function mi_tarea() {

  wp_mail('ejemplo@ejemplo.com', 'Mail mandado por el cron', 'Hola, esto es un correo enviado automáticamente');

}

Relacionar el Gancho con la función

El paso final es relacionar “mi_hook” con “mi_tarea”. Para ello añadimos una acción:

add_action('mi_hook', 'mi_tarea');

Con estos tres paso WordPress nos enviará un correo todos los días automáticamente. Podemos usarlo en un plugin o en nuestro theme, pegando el código en el archivo functions.php.

Eliminar un Cron

Para eliminar un Cron deberemos hacer una llamada a la siguiente función: wp_clear_scheduled_hook("mi_hook");

Comprobar los Cron programados

Para poder comprobar de una forma sencilla cuanto Crons tenemos programados en nuestra Web de WordPress podemos utilizar el Plugin Cron View.

Mejor todavía es el plugin WP-Crontol que permtie edit, borrar y ejecutar los Cron Jobs que se crean.

Ejemplos

Ejemplo 1: Lanzar un Cron a una hora en concreto de cada día

Un truco sencillo para crear un Cron que se ejecute cada día a la misma hora, por ejemplo a las 08:00 sería el siguiente:

  • Queremos que el Cron se ejecute cada día a las 08:00

if ( !wp_next_scheduled('kloutcalc') ) {

$date = date_create(date('Y-m-d'));

date_time_set($date, 8, 0, 0);

$time = strtotime(date_format($date, 'Y-m-d H:i:s'));

wp_schedule_event( $time, 'daily', 'writetweetmorning' );

}