Cómo Solucionar Programación Perdida en WordPress para Siempre 🚀

Actualizado:
Cómo-Solucionar-Programación-Perdida-en-WordPress-para-Siempre

¿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.php de tu tema).

Paso 1: Desactiva WP-Cron en wp-config.php

  1. 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.
  2. Ábrelo y busca la palabra cron.
  3. Si ya existe una línea DISABLE_WP_CRON con false, cámbiala a true. Si no existe, añade esta línea (antes de la que dice “That’s all, stop editing!”):
CÓDIGO
define('DISABLE_WP_CRON', true);
  1. 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

  1. Entra en tu cPanel y, en la sección Avanzado, abre Trabajos de cron (Cron Jobs).
  2. En la frecuencia, elige que se ejecute cada 10 minutos. Es más que suficiente para una web.
  3. En el campo Comando, pega este código cambiando tudominio.com por tu dominio:
CÓDIGO
wget -q -O - https://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  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.

CÓDIGO
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)

  1. Instala y activa el plugin gratuito Code Snippets desde Plugins → Añadir nuevo.
  2. Ve a Fragmentos de código → Añadir nuevo y ponle un nombre, por ejemplo “Recuperar programaciones perdidas”.
  3. Pega el código, comprueba que el tipo es PHP (no HTML) y que se ejecuta en todas partes.
  4. 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.

¿Te ha sido útil? Compártelo

Deja un comentario

Artículos relacionados

Carrito de compra
Scroll al inicio