12k
All articles

Cómo programar publicaciones en WordPress

Programa entradas en WordPress, corrige los errores de programación y configura WP-Cron con un cron real del servidor para publicar a tiempo.

OpenReplay Team
OpenReplay Team
Cómo programar publicaciones en WordPress

Para programar una entrada en WordPress, abre el panel Ajustes → Resumen de la entrada, haz clic en la fecha Publicar: Inmediatamente, elige una fecha y hora futuras y luego haz clic en el botón Programar que sustituye a Publicar.

Esa parte lleva menos de un minuto. Lo que lleva más tiempo es averiguar por qué la entrada que pusiste en cola para las 2 de la madrugada seguía ahí a la hora del desayuno, marcada en rojo como Programación perdida.

La razón se remonta a cómo WordPress ejecuta las tareas programadas: no mediante un temporizador real, sino a través de las cargas de página. Esta guía cubre primero la ruta rápida de clics y, después, el mecanismo de WP-Cron y la solución permanente basada en el cron del servidor, que acaba definitivamente con las programaciones perdidas.

Puntos clave

  • WordPress programa las entradas según la zona horaria de tu sitio, que por defecto es UTC. Configura la zona correcta en Ajustes → Generales antes de programar, o las entradas se publicarán a una hora local incorrecta.
  • WordPress no utiliza un temporizador de sistema real; usa WP-Cron, un pseudo-cron que solo comprueba si hay tareas pendientes cuando alguien carga una página, por lo que un sitio con poco tráfico o con caché agresiva puede pasar por alto por completo el momento programado.
  • La solución permanente consiste en ejecutar un cron real en el servidor que solicite wp-cron.php cada 5–15 minutos y luego añadir define('DISABLE_WP_CRON', true); a wp-config.php. Hazlo en ese orden, o las tareas programadas dejarán de ejecutarse en silencio.
  • Plugins como MWW Scheduled Post Trigger solo publican las entradas perdidas después de que se han retrasado; un cron en el servidor evita que se pierdan en primer lugar.
  • Plataformas gestionadas como Kinsta y DreamPress de DreamHost ya ejecutan un cron a nivel de servidor (normalmente cada 15 minutos), así que por lo general no necesitas configurar nada ahí.

Configura primero tu zona horaria

WordPress programa las entradas según la zona horaria de tu sitio, que por defecto es UTC. Configura la zona correcta en Ajustes → Generales antes de programar, o las entradas se publicarán a una hora local incorrecta. Una instalación nueva almacena las horas en Tiempo Universal Coordinado, así que una entrada que pongas en cola para las “8:00 AM” se publicará a las 8:00 AM UTC a menos que le hayas dicho a WordPress dónde estás. Ve a Ajustes → Generales, elige una ciudad de tu zona (las entradas basadas en ciudades gestionan automáticamente el horario de verano, a diferencia de los desplazamientos UTC fijos) y guarda. Haz esto una sola vez, antes de programar cualquier cosa. Las notas de instalación del plugin MWW Scheduled Post Trigger te indican comprobar primero este ajuste, y sus preguntas frecuentes te remiten de nuevo a él cuando las entradas siguen sin aparecer.

¿Cómo se programa una entrada en el editor de bloques?

Para programar una entrada en el editor de bloques, abre el panel Ajustes → Resumen, haz clic en la fecha Publicar: Inmediatamente, elige una fecha y hora futuras y luego haz clic en el botón Programar que sustituye a Publicar. WordPress publicará la entrada automáticamente en ese momento. Para confirmarlo, el botón superior muestra Programar en lugar de Publicar siempre que se haya fijado una fecha futura.

Editor clásico: en la caja meta Publicar, haz clic en Editar junto a Publicar inmediatamente, introduce la fecha y la hora, haz clic en OK y después en el botón Programar.

Las páginas funcionan igual. El control de fecha se encuentra en el mismo panel para ambos tipos de contenido.

Gestionar, desprogramar y publicar antes de tiempo

Para ver todas las entradas en cola, ve a Entradas → Todas las entradas y haz clic en el filtro Programadas situado sobre la lista; desde ahí puedes editar, publicar antes de tiempo o desprogramar cualquier elemento.

  • Publicar antes de tiempo: abre la entrada y haz clic en Publicar. Se publicará inmediatamente, sin importar la hora programada.
  • Desprogramar: cambia el estado de la entrada de nuevo a Borrador. Esto la elimina de la cola sin publicarla, y puedes seguir editándola y reprogramarla más tarde. (Poner la fecha en “ahora” y pulsar Publicar es publicar antes de tiempo, no desprogramar).
  • Programar ediciones en una entrada ya publicada: por defecto no puedes, porque cualquier cambio en una entrada en vivo se hace público en el momento en que guardas. Para poner en cola una actualización, usa un plugin como PublishPress Revisions, que prepara una revisión y la publica según una programación.

¿Por qué se pierden las entradas programadas de WordPress?

WordPress no utiliza un temporizador de sistema real. Usa WP-Cron, un pseudo-cron que solo comprueba si hay tareas pendientes cuando alguien carga una página, así que en un sitio con poco tráfico una entrada programada para las 2:00 AM puede no publicarse hasta que llegue el siguiente visitante. El Manual de Plugins es muy claro sobre lo que eso significa en la práctica: pon una tarea en cola para las dos de la tarde, no recibas visitantes hasta las cinco, y la tarea seguirá ahí hasta las cinco. Cuando por fin se activa el disparador, la entrada ya está fuera de plazo y WordPress la marca en rojo como Programación perdida.

Dos condiciones de producción empeoran esto:

  • Tráfico bajo o nulo. Como explica SpinupWP, los eventos programados solo se ejecutan cuando alguien aparece, por lo que un sitio que se queda sin actividad durante horas se perderá cualquier tarea prevista en esa ventana. Las publicaciones nocturnas en un blog personal son la víctima clásica.
  • Caché de página completa agresiva. Una página en caché se sirve como HTML estático sin ejecutar PHP, por lo que WP-Cron no se ejecuta en absoluto. Si sirves una parte suficiente de tu tráfico desde la caché, WordPress apenas se ejecuta, lo que significa que incluso un sitio con mucho tráfico puede dejar de disparar eventos programados. Es una causa habitual en sitios optimizados para rendimiento.

La solución permanente: desactivar el pseudo-cron y ejecutar un cron real en el servidor

La solución permanente es ejecutar un cron real con un temporizador fijo y luego desactivar el disparador por carga de página. Este es un enfoque documentado y no un truco improvisado: el Manual de Plugins cubre cómo enganchar WP-Cron al programador de tareas del sistema precisamente para el caso en el que una tarea tiene que ejecutarse a su hora.

Haz esto en orden. Si desactivas WP-Cron antes de que el reemplazo esté en marcha, las tareas programadas dejarán de ejecutarse sin error y sin aviso: entradas, copias de seguridad y comprobaciones de actualizaciones se quedarán en silencio hasta que te des cuenta.

Paso 1: añade un cron job real. En el módulo Cron Jobs de cPanel o en el crontab de tu servidor, solicita wp-cron.php a intervalos regulares. Un valor predeterminado fiable es cada 5–15 minutos. Esta forma con wget -q -O - es la de Kinsta:

*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

El */15 lo ejecuta cada 15 minutos; sustituye example.com por tu dominio. La forma canónica del Manual usa wget --delete-after http://YOUR_SITE_URL/wp-cron.php con el mismo intervalo. Cualquiera de las dos funciona; elige la que admita tu proveedor de alojamiento.

Paso 2: desactiva el disparador por carga de página. Una vez que el cron del servidor esté en marcha, añade esta línea a wp-config.php, por encima del comentario /* That's all, stop editing! */:

define('DISABLE_WP_CRON', true);

Plugin como solución provisional. Plugins como MWW Scheduled Post Trigger o Missed Scheduled Posts Publisher solo publican las entradas perdidas después de que ya se han retrasado, y las propias preguntas frecuentes de MWW lo describen como una solución provisional hasta que tú y tu proveedor de alojamiento averigüéis por qué el cron no se está ejecutando. Un cron real en el servidor evita la pérdida en lugar de reaccionar a ella. No confíes en ningún plugin como garantía, ya que algunos fallan en determinadas configuraciones de hosting.

Plugin provisionalCron real en el servidor (recomendado)
Qué hacePublica entradas ya perdidas en la siguiente visita/intervaloEjecuta wp-cron.php con un temporizador fijo, sin depender del tráfico
Ideal paraBlogs personales con poco tráfico, desbloqueo rápidoProducción, sitios con caché, poco tráfico o instalaciones multisitio
¿Evita la pérdida?No, reacciona despuésSí, es proactivo
ConfiguraciónInstalar y activarEditar wp-config.php + añadir la entrada de cron (o usar un hosting gestionado)

Hostings gestionados. Kinsta ejecuta un cron a nivel de servidor en cada sitio cada 15 minutos, y DreamPress de DreamHost desactiva WP-Cron por defecto y lo reemplaza por un cron del sistema con el mismo intervalo. En plataformas como estas normalmente no necesitas configurar nada. Consulta la documentación de tu proveedor antes de desactivar WP-Cron.

Verificar y forzar la ejecución con WP-CLI. En un servidor con SSH, wp cron event list muestra los eventos programados y sus próximas horas de ejecución, y wp cron event run --due-now fuerza inmediatamente todos los eventos atrasados, que es la forma más rápida de confirmar que una entrada atascada se publicará.

Conclusión

Programar una entrada en WordPress es una ruta de clics de un minuto, pero mantener esas entradas fiables es una cuestión de servidor. Configura tu zona horaria en Ajustes → Generales y pon las entradas en cola desde el panel Resumen. Si alguna vez las entradas programadas muestran Programación perdida, deja de confiar en el pseudo-cron basado en cargas de página: apunta un cron real del servidor a wp-cron.php cada 5–15 minutos y añade después define('DISABLE_WP_CRON', true);. Ese único cambio convierte la programación de un “mejor esfuerzo” en algo fiable, incluso en un sitio tranquilo o con caché.

Preguntas frecuentes

¿Debería desactivar WP-Cron si estoy en un hosting gestionado de WordPress como Kinsta o DreamHost?

No; en plataformas gestionadas como Kinsta y DreamPress de DreamHost normalmente no necesitas desactivar WP-Cron por tu cuenta, porque estas plataformas ya ejecutan por su lado un cron a nivel de servidor (habitualmente cada 15 minutos) que dispara wp-cron.php independientemente del tráfico. Consulta primero la documentación de tu proveedor: muchos planes gestionados configuran esto automáticamente y duplicarlo no aporta ningún beneficio. Solo toca wp-config.php si tu proveedor confirma que no ejecuta un cron en el servidor.

¿Cuál es la diferencia entre un plugin de programaciones perdidas y un cron real en el servidor?

Un plugin de programaciones perdidas como MWW Scheduled Post Trigger o Missed Scheduled Posts Publisher solo publica las entradas después de que ya se han retrasado, reaccionando en la siguiente carga de página o intervalo, mientras que un cron real en el servidor dispara wp-cron.php con un temporizador fijo independientemente del tráfico y evita que la pérdida ocurra. Los plugins son una solución provisional rápida para blogs personales con poco tráfico; un cron en el servidor es la solución proactiva para instalaciones en producción, con caché o multisitio.

¿Por qué se publicó mi entrada programada a una hora del día equivocada?

Una instalación nueva de WordPress almacena las horas en Tiempo Universal Coordinado (UTC), así que una entrada puesta en cola para las '8:00 AM' se publica a las 8:00 AM UTC a menos que configures tu zona en Ajustes y luego Generales. Elige una entrada basada en una ciudad en lugar de un desplazamiento UTC fijo, porque las entradas de ciudad se ajustan automáticamente al horario de verano. Configura esto una sola vez antes de programar cualquier cosa para que todas las entradas futuras sigan tu hora local.

¿Cómo puedo comprobar si mis entradas programadas se publicarán realmente?

En un servidor con acceso SSH, ejecuta wp cron event list para ver todos los eventos programados y su próxima hora de ejecución, y luego ejecuta wp cron event run --due-now para forzar la ejecución inmediata de todos los eventos atrasados. Esta pareja de comandos de WP-CLI es la forma más rápida de confirmar que una entrada atascada se publicará y de diagnosticar si WP-Cron se está ejecutando en absoluto. Sin SSH, el plugin WP Crontrol expone la misma lista de eventos desde el escritorio de administración.

¿La caché de página completa provoca que se pierdan entradas programadas?

Sí, la caché de página completa agresiva es una causa habitual y a menudo pasada por alto de las programaciones perdidas. Una página en caché se sirve como HTML estático sin ejecutar PHP, por lo que WP-Cron nunca se ejecuta en esas peticiones, incluso cuando el tráfico es alto. Si sirves una parte suficiente de tu tráfico desde la caché, WordPress apenas se ejecuta, así que los eventos programados dejan de dispararse. La solución es la misma que para los sitios con poco tráfico: desactivar el disparador por carga de página y ejecutar un cron real en el servidor.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.