Cómo crear tareas programadas en WordPress ( cron jobs)

Las tareas programadas son muy útiles en ciertos casos.

Habrá tareas que necesites que se ejecuten cada cierto tiempo sin tener que estar pendiente de ejecutarlas tu mismo/a en esos momentos. Eso es inviable, no podemos estar pendientes en ciertos momentos para ejecutar una función que necesitamos que se ejecute en cierto momento o en ciertos momentos.

Pues bien, para eso, WordPress dispone de un mecanismo que nos permite programar la ejecución de tareas o funciones en código y es muy sencillo como verás a continuación.

Antes, debo avisarte de que las tareas programadas de WordPress no son como las que puedas programar a nivel de servidor ya que las de WordPress dependen de que tengas visitas o por decirlo de otra forma. Si no tienes visitas en el momento en que tienes programada la tarea, no se ejecutará en ese momento sino que se ejecutará en el momento que tenga lugar la primera visita después de esa programación. En cambio, los cron jobs que configuras a nivel de servidor no depende de esto sino que se ejecutarán en el momento preciso. Pero en este tutorial te voy a enseñar cómo puedes crear tareas programadas en WordPress, la otras las dejaremos para otro tutorial si te parece interesante.

Al lío. Para crear una tarea programada en WordPress, crearemos un hook y le asignaremos una función que queramos que se ejecute.

Para este ejemplo he creado el hook «cron_borrar_todos_posts» y le asigno la función «oaf_borrar_todos_posts» de esta manera:

add_action('cron_borrar_todos_posts', 'oaf_borrar_todos_posts');

Ahora lo que tenemos que hacer es crear un evento o programación para decirle a WordPress que cree esa programación en el momento y la periodicidad de la misma como por ejemplo:

wp_schedule_event((strtotime('24:00:00')), 'daily', 'cron_borrar_todos_posts');

Con esto le estamos diciendo a WordPress que todos los días, a las 24 horas ejecute la función «cron_borrar_todos_posts«.

Para más información sobre wp_schedule_event(), haz click por aquí.

También te animo a que le eches un vistazo a la función wp_get_schedules() para que entiendas mejor la parte de las recurrencias de las tareas programadas.

No está de más añadirle un condicional para asegurarnos de que no existe ya esa tarea programada de esta forma:

if (! wp_next_scheduled('cron_borrar_todos_posts')) {
	wp_schedule_event((strtotime('24:00:00')), 'daily', 'cron_borrar_todos_posts');
}

Como ves es muy secillo.

Ah, bueno, nos falta la función que va a ejecutar. Para este ejemplo he creado una función que borra todos los posts:

function oaf_borrar_todos_posts(){
	$todos_posts = get_posts( array('post_type'=>'post','numberposts'=>-1) );
	foreach ($todos_posts as $unpost) {
		wp_delete_post( $todos_posts->ID, true );
	}
}

Y para que que lo tengas todo en un mismo sitio y ordenado, te dejo el código completo en un gist:

Personalmente me parece una herramienta muy útil para ciertos casos que yo mismo uso según para qué.

En otro tutorial te voy a enseñar un plugin para poder ver y semi-gestionar estas tareas programadas de WordPress y así puedas tener una visión más gráfica de lo que está ejecutando WordPress y cuando.

Sin más, nos vemos…