6

Cómo programar un cron en WordPress

Según la definición de la Wikipedia, un cron es un administrador regular de procesos en segundo plano que ejecuta procesos a intervalos regulares. En ocasiones, podemos necesitar un cron en WordPress para lanzar determinados eventos periódicamente, como eliminar el spam o hacer backups de la base de datos. Con WordPress podremos programar estos eventos de una forma muy sencilla.

La función que usaremos para programar un cron en WordPress se llama wp_schedule_event que tiene la siguiente forma:

1
wp_schedule_event($timestamp, $recurrencia, $hook, $args);

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 un cron

Lo primero que tenemos que hacer es programar el cron usando esta función.

1
2
3
if ( !wp_next_scheduled('mi_hook') ) {
   wp_schedule_event( time(), 'daily', 'mi_hook' );
}

En este ejemplo hemos llamado “mi_hook” al hook que usaremos para lanzar el evento. En la línea 1 comprobamos que no exista ya un cron programado con este nombre, y en la línea 2 lo programamos para que se ejecute una vez al día con la fecha actual como fecha de inicio.

Lo siguiente es crear la función que va a lanzar el cron cada vez que se ejecute. Por ejemplo, vamos a crear una función que nos mande un correo todos los días saludándonos.

1
2
3
function mi_tarea() {
   wp_mail('ejemplo@ejemplo.com', 'Mail mandado por el cron', 'Hola, esto es un correo enviado automáticamente');
}

Hemos llamado a esta función “mi_tarea” y lo que hace es mandarnos un correo con el título “Mail mandado por el cron” y en el que nos dice “Hola, esto es un correo enviado automáticamente”. Hemos usado una función nativa de WordPress para mandar correos llamada wp_mail.

Ya sólo nos falta una cosa, relacionar “mi_hook” con “mi_tarea”. Para ello añadimos una acción:

1
add_action('mi_hook', 'mi_tarea');

Con estos 3 trozos de código, 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.

Desactivar un cron

Cuando ya no necesitemos el cron, tendremos que desactivarlo para que no siga ejecutándose.

1
2
3
4
function mi_tarea_desactivar() {
   wp_clear_scheduled_hook('mi_hook');
}
delete_action( 'mi_hook', 'mi_tarea_desactivar' );

Y ya está. La próxima vez que se ejecute el evento, se desactivará el cron.