5

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.

4 comentarios

  1. Interesantisima aportacion. Lo unico , y perdon por mi torpeza, cual seria el lugar donde incluir esas lineas . Un fichero nuevo y ejecutarlo ?? dentro de wp_cron???
    gracias

    • En el archivo functions.php de tu theme, que estará aquí:

      /wp-content/themes/xxxxx/functions.php

      “xxxxx” es el nombre del theme que estés usando. Si no existe ese archivo, créalo.

  2. Hola, estuve intentando desactivar un cron pero me salía error y buscando en el codex encuentro que ahora se usa remove_action en lugar de delete_action, sería bueno que lo actualices porque no encontré info más q en este sitio y así los nuevos no nos rompemos la cabeza buscando el error.

    Gracias

  3. Cree el codigo pero no funciona necesito instalar o setear alguna funcion antes?

1 trackback

  1. Bitacoras.com

Comentar

*

*

Para añadir código formateado, escribe el código entre <pre lang="php" line="1"> y </pre>

Si quieres un avatar personalizado, créate uno en gravatar.com con tu dirección de correo. Cada vez que comentes con ese correo, aparecerá tu avatar personalizado.