Qué es WP_Cron en WordPress y cómo se usa?

Cuando trabajás con WordPress, una de las funcionalidades menos visibles pero más importantes es el sistema de tareas programadas conocido como WP_Cron. En este artículo te explico qué es, cómo funciona y cómo podés sacarle el jugo para automatizar tareas dentro de tu sitio. Además, te muestro cómo desactivar el WP_Cronpor defecto para usar el cron del servidor, que es mucho más confiable.

 

¿Qué es WP_Cron?

WP_Cron es el sistema interno de WordPress para ejecutar tareas programadas, como publicar entradas programadas, enviar correos, limpiar datos antiguos, y mucho más.

Pero hay algo importante que tenés que saber: no es un cron real. A diferencia del cron de Linux, que ejecuta tareas en intervalos fijos, WP_Cronsolo se ejecuta cuando alguien visita tu sitio. Es decir, si no hay tráfico, las tareas no se ejecutan a tiempo.

 

¿Cómo funciona WP_Cron?

Cada vez que alguien carga una página en tu sitio, WordPress verifica si hay tareas programadas pendientes. Si hay alguna, las ejecuta en segundo plano (de forma asíncrona).

Esto se gestiona mediante la función wp_cron()que se dispara automáticamente durante el proceso de carga de cada página, si no hay ninguna otra ejecución activa en ese momento.

 

¿Cómo programar una tarea con WP_Cron?

Podés usar wp_schedule_event()para agregar tareas personalizadas. Veamos un ejemplo práctico:

 

1. Registrar el evento al activar el plugin o tema:

<?php
function activateMyPlugin() {
    if ( ! wp_next_scheduled( 'myCustomCronHook' ) ) {
        wp_schedule_event( time(), 'hourly', 'myCustomCronHook' );
    }
}
register_activation_hook( __FILE__, 'activateMyPlugin' );

 

2. Crear la función que se va a ejecutar:

<?php
function executeMyScheduledTask() {
    // Lógica personalizada, como enviar reportes o limpiar registros
    error_log( 'Ejecutando tarea programada...' );
}
add_action( 'myCustomCronHook', 'executeMyScheduledTask' );

 

3. Cancelar la tarea al desactivar el plugin:

<?php
function deactivateMyPlugin() {
    $timestamp = wp_next_scheduled( 'myCustomCronHook' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'myCustomCronHook' );
    }
}
register_deactivation_hook( __FILE__, 'deactivateMyPlugin' );

 

Frecuencias disponibles

WordPress incluye frecuencias por defecto:

  • hourly: cada hora
  • twicedaily: dos veces al día
  • daily: una vez al día

Si necesitas una frecuencia personalizada, puedes registrarla así:

<?php
function addCustomCronInterval( $schedules ) {
    $schedules['everyFiveMinutes'] = [
        'interval' => 300, // segundos
        'display'  => 'Cada 5 minutos',
    ];
    return $schedules;
}
add_filter( 'cron_schedules', 'addCustomCronInterval' );

Y luego usar 'everyFiveMinutes'como nombre de intervalo en wp_schedule_event().

 

¿Cómo ver y depurar las tareas programadas?

Puedes usar el plugin WP Crontrol, que te permite:

  • Ver las tareas programadas
  • Editar, eliminar o ejecutar tareas manualmente
  • Agregar nuevas tareas desde el panel de administración

 

Deshabilitar WP_Cron y usar el cron real del servidor

Si tu sitio tiene mucho tráfico o necesitas más precisión, lo ideal es desactivar WP_Cron y usar el cron de tu servidor.

 

Paso 1: Desactivar WP_Cron en wp-config.php

Agregá esta línea antes de /* That's all, stop editing! */:

<?php
define( 'DISABLE_WP_CRON', true );

 

Paso 2: Configurar una tarea cron en tu servidor

En cPanel, Plesk o por SSH, agregá una tarea cron cada 5 minutos (o el intervalo que necesites). El comando sería algo así:

*/5 * * * * curl -s https://tusitio.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Esto llama a wp-cron.phpde forma automática, sin depender del tráfico del sitio.

 

WP_Cron es una herramienta muy útil para automatizar tareas dentro de WordPress, pero hay que entender sus limitaciones. Para sitios pequeños con poco tráfico, puede ser suficiente. Pero si querés más confiabilidad, lo ideal es usar el cron real del servidor.

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to Top
0
Would love your thoughts, please comment.x
()
x