¿Tus entradas programadas no se publican a su hora y WordPress te muestra el aviso “Programación perdida”? No es cosa tuya: es un fallo muy habitual de cómo funciona WordPress por dentro. En esta guía te explico por qué pasa y cómo lo he solucionado yo de forma definitiva en tres pasos. Llevo meses con esto funcionando en mi web y no ha vuelto a fallar.
Importante: esta solución es para webs alojadas en un hosting con cPanel (la gran mayoría de hostings Linux). Si tu hosting te oculta el cPanel, pídele a su soporte que te active una tarea cron.
Por qué aparece “Programación perdida”
WordPress tiene su propio sistema de tareas automáticas, llamado WP-Cron. El problema es que WP-Cron solo se activa cuando alguien visita tu web. Si programas una entrada para las 19:00 y a esa hora no entra nadie, WP-Cron no se ejecuta, la entrada no se publica y se queda con el aviso rojo de programación perdida.
La solución es sencilla: desactivar WP-Cron y que sea el propio servidor quien lo ejecute cada pocos minutos, haya visitas o no. Un cron de verdad, del servidor, es un programa que lanza tareas automáticas a intervalos fijos: copias de seguridad, correos programados… y, en este caso, las tareas de WordPress.
Qué necesitas
- Acceso a tu hosting por FTP (yo uso FileZilla) o al administrador de archivos del hosting.
- Acceso a tu cPanel.
- Para el paso 3: el plugin gratuito Code Snippets (o acceso al
functions.phpde tu tema).
Paso 1: Desactiva WP-Cron en wp-config.php
- Conéctate por FTP y descarga el archivo wp-config.php (está en la carpeta principal de tu WordPress). Guarda una copia por si acaso.
- Ábrelo y busca la palabra cron.
- Si ya existe una línea
DISABLE_WP_CRONconfalse, cámbiala atrue. Si no existe, añade esta línea (antes de la que dice “That’s all, stop editing!”):
define('DISABLE_WP_CRON', true);
- Guarda el archivo y vuelve a subirlo al hosting, sustituyendo el original.
Ojo: haz el paso 2 justo después. Si desactivas WP-Cron y no creas la tarea del servidor, WordPress se quedará sin ejecutar ninguna tarea programada.
Paso 2: Crea la tarea cron en cPanel
- Entra en tu cPanel y, en la sección Avanzado, abre Trabajos de cron (Cron Jobs).
- En la frecuencia, elige que se ejecute cada 10 minutos. Es más que suficiente para una web.
- En el campo Comando, pega este código cambiando
tudominio.compor tu dominio:
wget -q -O - https://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
- Pulsa Añadir nuevo trabajo de cron. Lo verás en la lista de trabajos actuales.
A partir de ahora es el servidor quien “despierta” a WordPress cada 10 minutos. Si programas una entrada para las 19:00, como muy tarde estará publicada a las 19:10.
Paso 3 (recomendado): Rescata las entradas que se hayan quedado atascadas
Con los dos pasos anteriores el problema ya está resuelto. Este tercer paso es un seguro extra: un pequeño código que busca las entradas programadas cuya hora ya ha pasado y las publica.
add_action('init', function() {
global $wpdb;
$missed = $wpdb->get_results("
SELECT ID
FROM $wpdb->posts
WHERE post_status = 'future'
AND post_date_gmt <= UTC_TIMESTAMP()
LIMIT 10
");
if ($missed) {
foreach ($missed as $post) {
wp_publish_post($post->ID);
}
}
});
Opción fácil: con el plugin Code Snippets (sin tocar archivos)
- Instala y activa el plugin gratuito Code Snippets desde Plugins → Añadir nuevo.
- Ve a Fragmentos de código → Añadir nuevo y ponle un nombre, por ejemplo “Recuperar programaciones perdidas”.
- Pega el código, comprueba que el tipo es PHP (no HTML) y que se ejecuta en todas partes.
- Pulsa Guardar cambios y activar.
Opción manual: en functions.php
Descarga por FTP el functions.php de tu tema (mejor de un tema hijo, en wp-content/themes/tu-tema-hijo/), guarda una copia, pega el código al final y vuelve a subirlo.
Preguntas frecuentes
¿Qué es la “programación perdida” en WordPress?
Es el aviso que aparece cuando una entrada programada no se ha publicado a su hora porque WP-Cron no llegó a ejecutarse, normalmente porque nadie visitó la web en ese momento.
¿Desactivar WP-Cron es peligroso?
No, siempre que crees la tarea del servidor del paso 2. De hecho es lo que recomiendan muchos hostings, porque además tu web deja de ejecutar WP-Cron en cada visita y va más ligera.
¿Cada cuánto conviene ejecutar el cron?
Cada 10 minutos va perfecto para la mayoría de webs. Si necesitas más precisión, puedes bajarlo a 5 minutos.
¿Y si no tengo cPanel?
La idea es la misma en cualquier hosting: desactivar WP-Cron y crear una tarea programada que llame a wp-cron.php. Si tu panel no lo permite, pide al soporte de tu hosting que te la configuren.
¿Sirve también para lecciones o productos programados?
Sí. El cron del servidor ejecuta todas las tareas programadas de WordPress, sean entradas, lecciones, productos o lo que sea.
Si tienes una web con WordPress, también te puede interesar cómo saber si tu WordPress tiene una vulnerabilidad ahora mismo. ¿Te ha funcionado? Cuéntamelo en los comentarios.