
WP-Cron permite que WordPress ejecute tareas programadas sin depender directamente del planificador del sistema operativo. Es cómodo, compatible con casi cualquier alojamiento y suficiente para muchos sitios. El problema aparece cuando se le exige la precisión de un cron real: WP-Cron no funciona como un servicio que permanece ejecutándose en segundo plano.
Entender esa diferencia ayuda a diagnosticar entradas programadas que llegan tarde, procesos que no se ejecutan cuando esperabas o automatizaciones que acumulan trabajo. La solución no siempre consiste en desactivar WP-Cron: primero hay que saber qué está fallando y qué nivel de puntualidad necesita realmente la tarea.
Qué es WP-Cron y cómo funciona
WordPress utiliza WP-Cron para gestionar acciones dependientes del tiempo. El sistema mantiene una lista de eventos pendientes y comprueba cuáles están preparados para ejecutarse cuando WordPress recibe actividad suficiente para lanzar el proceso.
La documentación oficial de WordPress explica que WP-Cron no se ejecuta continuamente como el cron del sistema. Si una tarea está prevista para una hora concreta y el sitio no recibe ninguna visita o petición que desencadene la comprobación hasta bastante después, la tarea puede ejecutarse con retraso.
Esto no significa que WP-Cron esté roto. Significa que su objetivo es ofrecer un planificador compatible con entornos donde el usuario no tiene acceso al cron del servidor.
Qué tareas pueden depender de WP-Cron
WordPress y sus plugins pueden utilizar el sistema de cron para trabajos como:
- publicar entradas programadas;
- ejecutar comprobaciones o mantenimientos periódicos;
- procesar colas o acciones diferidas;
- enviar avisos o resúmenes;
- sincronizar información con servicios externos;
- limpiar datos temporales;
- ejecutar procesos creados por plugins de comercio, formularios, copias de seguridad o automatización.
La lista exacta depende de los plugins y del código del sitio. Por eso, antes de tocar la configuración, conviene identificar qué eventos existen y qué componente los ha registrado.
Por qué una tarea programada puede ejecutarse tarde
El sitio recibe poco tráfico
Es el caso clásico. Si nadie accede al sitio durante un periodo largo, WP-Cron puede no tener una oportunidad inmediata de procesar el evento pendiente. Para una tarea que solo necesita ejecutarse “aproximadamente cada hora” puede ser aceptable; para una integración que debe salir a las 08:00, quizá no.
Las peticiones loopback fallan
WordPress puede intentar iniciar wp-cron.php mediante una petición interna. Restricciones del servidor, autenticación HTTP, reglas de seguridad, problemas DNS o configuraciones de red pueden impedir ese flujo. En estos casos hay que diagnosticar la causa, no limitarse a aumentar timeouts.
Hay demasiadas tareas o alguna tarda demasiado
Un cron lleno de eventos repetidos o procesos pesados puede generar retrasos y picos de recursos. Una automatización robusta debería dividir trabajos grandes, controlar reintentos y evitar ejecutar varias veces la misma operación. Este criterio encaja con la guía sobre reintentos e idempotencia en automatizaciones.
WP-Cron está desactivado sin un disparador alternativo
Definir DISABLE_WP_CRON impide el disparo normal de WordPress. Si se hace eso y después no existe un cron del sistema, una tarea del hosting o un mecanismo equivalente que llame a wp-cron.php, los eventos pueden quedarse pendientes.
WP-Cron frente a cron del sistema
| Aspecto | WP-Cron | Cron del sistema |
|---|---|---|
| Disparo | Depende de actividad/peticiones de WordPress | Lo inicia el planificador del servidor |
| Precisión temporal | Aproximada | Mucho más predecible |
| Acceso al servidor | No suele ser necesario | Normalmente sí |
| Configuración | Integrada en WordPress | Depende del hosting o sistema operativo |
| Uso recomendado | Tareas no críticas y sitios sencillos | Tareas sensibles al tiempo o infraestructuras con mayor control |
No hay una opción universalmente mejor. WordPress señala que sustituir el disparo normal de WP-Cron por un planificador externo puede tener sentido, pero no es obligatorio si el sistema actual funciona correctamente y no existe una necesidad real.
Cuándo mantener WP-Cron tal como está
En muchos proyectos es preferible no añadir complejidad. Mantener WP-Cron puede ser suficiente cuando:
- las tareas no necesitan ejecutarse al minuto exacto;
- el sitio recibe tráfico con regularidad;
- no existen retrasos observables;
- las colas son pequeñas;
- el hosting no ofrece un planificador externo;
- el coste operativo de una configuración adicional no aporta una mejora tangible.
Optimizar no consiste en sustituir componentes que funcionan, sino en eliminar una limitación cuando esa limitación existe de verdad.
Cuándo tiene sentido usar un cron real
Un disparador del sistema puede ser una mejor opción cuando:
- hay tareas que deben ejecutarse con una periodicidad predecible;
- el sitio tiene poco tráfico y las tareas se retrasan;
- se procesan sincronizaciones o colas de forma recurrente;
- el alojamiento permite programar tareas cron de forma controlada;
- quieres desacoplar el disparo de WP-Cron de las visitas del frontend.
El objetivo no es eliminar el sistema de eventos de WordPress. Lo habitual es mantener WP-Cron como gestor de las tareas y cambiar únicamente la forma de activarlo.
Cómo sustituir el disparador de WP-Cron de forma segura
1. Inspecciona los eventos existentes
Antes de modificar nada, identifica los hooks programados, su siguiente ejecución y su frecuencia. Con WP-CLI puedes listar los eventos:
wp cron event list
También puedes comprobar si el sistema de spawn funciona:
wp cron test
Estas comprobaciones ayudan a separar un problema de programación de un problema de ejecución.
2. Configura primero el disparador externo
En Linux o macOS, WordPress documenta el uso de crontab y una petición a wp-cron.php. Por ejemplo, una ejecución cada cinco minutos podría plantearse así:
*/5 * * * * wget --delete-after https://tu-dominio.com/wp-cron.php
La frecuencia debe elegirse según el tipo de tareas y la capacidad del servidor. Ejecutar el disparador cada minuto no mejora automáticamente una tarea que internamente está programada cada hora.
3. Comprueba que el cron externo funciona
Antes de desactivar el disparo normal, verifica que la petición se ejecuta y que los eventos pendientes avanzan. Si el hosting tiene un panel propio de tareas programadas, revisa sus logs o el estado de ejecución.
4. Desactiva el disparo automático de WordPress
Una vez confirmado el mecanismo externo, WordPress permite evitar que WP-Cron se lance con las visitas añadiendo en wp-config.php:
define( 'DISABLE_WP_CRON', true );
Este cambio debe hacerse solo cuando existe un sustituto probado. De lo contrario, puedes detener tareas que dependen del cron.
5. Valida las tareas importantes
Después del cambio, comprueba publicaciones programadas, emails, procesos de plugins, sincronizaciones y cualquier operación que dependa del tiempo. Igual que en un mantenimiento WordPress bien planteado, guardar una configuración no basta: hay que comprobar el resultado.
Cómo programar un evento sin duplicarlo
Si desarrollas una integración propia, uno de los errores más fáciles es llamar a wp_schedule_event() repetidamente. WordPress advierte que hacerlo puede crear múltiples eventos con el mismo hook.
La comprobación básica consiste en verificar primero si ya existe una próxima ejecución:
if ( ! wp_next_scheduled( 'gcn_sync_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'gcn_sync_hook' );
}
add_action( 'gcn_sync_hook', 'gcn_run_sync' );
function gcn_run_sync() {
// Ejecutar aquí una tarea pequeña, controlada e idempotente.
}
Para integraciones con APIs o sistemas externos, además conviene registrar resultados, gestionar errores temporales y evitar duplicados. La guía de webhooks y APIs en WordPress amplía ese enfoque.
Elimina los eventos que ya no necesitas
Una tarea programada debería tener también un mecanismo de limpieza. Si un plugin propio se desactiva o una integración deja de existir, no conviene dejar hooks intentando ejecutarse indefinidamente.
WordPress proporciona funciones para localizar y desprogramar eventos. En un plugin, el proceso de desactivación puede limpiar el hook asociado para evitar residuos y ejecuciones innecesarias.
Cómo diagnosticar WP-Cron con WP-CLI
WP-CLI permite revisar el sistema sin instalar otro plugin solo para inspeccionar el cron:
# Comprobar el sistema de spawn
wp cron test
# Ver eventos registrados
wp cron event list
# Ejecutar ahora los eventos vencidos
wp cron event run --due-now
# Ver las frecuencias disponibles
wp cron schedule list
Ejecutar manualmente los eventos vencidos es útil para diagnóstico, pero no sustituye a corregir el motivo por el que dejaron de ejecutarse de forma normal.
Errores frecuentes al optimizar WP-Cron
- Desactivarlo antes de crear el cron real. Deja tareas sin disparador.
- Suponer que todos los retrasos son culpa de WP-Cron. Un callback lento o una API externa también pueden ser el cuello de botella.
- Programar el mismo evento varias veces. Hay que comprobar si ya está registrado.
- Crear intervalos demasiado agresivos. Más frecuencia puede significar más carga sin aportar utilidad.
- Ejecutar trabajos enormes en una sola llamada. Es mejor dividir procesos y diseñarlos para reanudarse.
- No limpiar hooks obsoletos. Las tareas que ya no existen siguen consumiendo recursos y complican el diagnóstico.
- Instalar plugins solo para “arreglar el cron” sin analizar la causa. La herramienta debe responder a un problema concreto.
Checklist para una programación fiable
- Identifica qué hooks dependen de WP-Cron.
- Comprueba próxima ejecución y recurrencia.
- Revisa si el sitio necesita precisión real o solo periodicidad aproximada.
- Comprueba loopback y ejecución con WP-CLI cuando sea posible.
- Evita eventos duplicados con
wp_next_scheduled(). - Haz que las tareas sean pequeñas e idempotentes.
- Registra errores y resultados de procesos importantes.
- Si usas cron del sistema, valida primero el disparador externo.
- Solo después utiliza
DISABLE_WP_CRON. - Vuelve a comprobar publicaciones, colas, emails e integraciones tras el cambio.
WP-Cron es una herramienta, no una garantía de puntualidad
WP-Cron resuelve bien una necesidad concreta: permitir que WordPress programe tareas en casi cualquier alojamiento. Para procesos no críticos puede ser exactamente lo que necesitas. Cuando la puntualidad, el volumen o la fiabilidad operativa tienen más peso, un cron del sistema puede convertirse en un disparador más predecible.
La decisión correcta parte de observar el comportamiento real del sitio y diseñar la automatización para soportar retrasos, reintentos y ejecuciones repetidas sin efectos secundarios. Si necesitas revisar procesos automáticos, integraciones o tareas programadas en un proyecto WordPress, puedes consultar el servicio de automatización e integraciones.
