En WordPress, la función de programar entradas (y cualquier tarea programada) es básica para casi cualquier proyecto serio: blogs con calendario editorial, tiendas que actualizan precios en una fecha concreta, webs que lanzan campañas a una hora exacta, etc.
El problema llega cuando aparece el temido mensaje de “programación perdida” (missed schedule): el post no se publica a la hora indicada, o directamente nunca llega a publicarse. Y si dependes de esa publicación a tiempo, puede ser un auténtico desastre.
La buena noticia es que este error suele tener causas claras y, sobre todo, solución. Vamos a ver por qué ocurre y cómo arreglarlo, tanto con cambios manuales como con plugins, para que no vuelva a pillarte por sorpresa.
Detrás de casi todas las tareas programadas de WordPress está WP-Cron, un sistema interno que se encarga de:
A diferencia de un cron real del servidor, WP-Cron no se ejecuta en segundo plano de forma continua. Solo se dispara cuando alguien visita la web (frontal o área de administración). Si no hay visitas, no hay WP-Cron… y por tanto, no hay tareas programadas ejecutadas.
Sobre ese comportamiento se suman varios factores típicos que acaban en el error de “programación perdida”.
Es uno de los fallos más frecuentes y más tontos:
Resultado: la hora interna de WordPress no coincide con la que tú crees y la publicación se retrasa, se adelanta o directamente se marca como “perdida”.
Después de:
es relativamente habitual que:
Si antes funcionaba todo bien y tras una migración o un “gran cambio” deja de hacerlo, esta es una pista clara.
WordPress y sus plugins necesitan memoria PHP para ejecutar sus procesos. Si el límite de memoria es bajo y el sitio está cargado de funcionalidades:
La caché (ya sea a nivel de plugin, servidor o CDN como Cloudflare) puede interferir con WP-Cron, especialmente cuando:
wp-cron.php quedan “congelados” en caché,Si nadie “despierta” WP-Cron visitando el sitio, las tareas programadas se acumulan sin ejecutarse.
WP-Cron no es un cron de sistema real:
Por eso, en sitios con tráfico bajo o con muchas capas de caché, WP-Cron puede ser poco fiable si no se refuerza.
Antes de instalar nada, merece la pena revisar los puntos básicos.
Ve a:
Ajustes → Generales → Zona horaria
Recomendaciones:
Después de cambiarlo, prueba a programar una entrada de test unos minutos en el futuro y comprueba si se publica a tiempo.
Para comprobar si WP-Cron se ejecuta correctamente, puedes llamar manualmente al script:
https://tudominio.com/wp-cron.php?setcronjob
Lenguaje del código: JavaScript (javascript)
tudominio.com por el dominio real.Si al ejecutar esta URL se “desatascan” tareas pendientes (entradas que pasan de “programadas” a “publicadas”), sabrás que WP-Cron funciona, pero no se estaba invocando automáticamente.
Si el servidor va justo de recursos, es buena idea subir la memoria disponible para WordPress.
En el archivo wp-config.php (en la raíz de la instalación de WordPress), añade o ajusta:
define( 'WP_MEMORY_LIMIT', '768M' );
Lenguaje del código: JavaScript (javascript)
O el valor que tenga sentido para tu hosting (512M, 256M, etc., según plan y necesidades).
En muchos paneles de hosting también puedes ajustar la memoria PHP desde la sección de Configuración de PHP.
Si utilizas:
revisa estos puntos:
wp-cron.php de la caché (si tu sistema lo permite).La idea es asegurarte de que:
wp-cron.php puede ejecutarse sin quedarse atrapado en caché.WordPress incluye un cron alternativo que a veces funciona mejor en entornos problemáticos.
En wp-config.php:
define( 'DISABLE_WP_CRON', true );
define( 'ALTERNATE_WP_CRON', true );
Lenguaje del código: JavaScript (javascript)
Con esto:
No es la solución perfecta (ensucia un poco las URLs en los disparos de cron), pero puede sacarte del apuro cuando no tienes acceso completo al servidor.
La solución más robusta para sitios serios es desactivar WP-Cron automático y sustituirlo por un cron real de servidor.
En wp-config.php, asegúrate de tener:
define( 'DISABLE_WP_CRON', true );
Lenguaje del código: JavaScript (javascript)
En el panel de control del servidor (cPanel, Plesk, panel propio del proveedor, etc.):
wget -q -O - https://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Lenguaje del código: JavaScript (javascript)
O bien:
curl -s https://tudominio.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Lenguaje del código: JavaScript (javascript)
Con esto:
Si tienes acceso SSH y WP-CLI instalado, puedes gestionar las tareas cron con comandos de consola.
Ejemplo típico de entrada cron en el servidor:
*/10 * * * * cd /ruta/a/tu/web; wp cron event run --due-now > /dev/null 2>&1
Lenguaje del código: JavaScript (javascript)
*/10 → ejecuta cada 10 minutos (ajústalo a tus necesidades)./ruta/a/tu/web por la ruta real del sitio.Este enfoque es ideal en entornos profesionales o multi-sitio donde se quiere control fino sobre las tareas.
Si prefieres evitar tocar archivos o cron del servidor, hay varios plugins diseñados específicamente para gestionar tareas programadas que no se ejecutan.
Eso sí:
Es una solución práctica para webs pequeñas o medianas donde no se quiere tocar cron del servidor.
Disponible en GitHub, está pensado para:
Permite ver qué tareas se han “perdido”, lo que ayuda a diagnosticar patrones de fallo.
El error de programación perdida en WordPress no es un fallo misterioso del CMS, sino la suma de:
Para dejarlo resuelto de forma sólida, puedes seguir este checklist:
wp-cron.php.Con estas medidas, programar entradas en WordPress volverá a ser lo que debería: una función fiable en la que puedes confiar para tu calendario editorial, cambios de precio, campañas o automatizaciones.
vía: webempresa
