Trabajas tus post con tiempo, y quieres que se publiquen un día y hora programados.
Preparas programaciones automáticas en tus redes sociales, para compartir tus post.
Llega el momento.
Se comparte en redes sociales, y cuando alguien quiere entrar, se encuentra un bonito fallo. ¿Qué paso con tu post que no se publico?
Pues que al entrar en tu listado de entradas te encuentras el fallo «programación perdida».
Eso mismo me ha pasado esta mañana con mi post de MailRelay y Magic Action Box y gracias a Iñigo del Rio Arrieta y Pablo Rodríguez que me avisaron me di cuenta a tiempo.
Programación perdida en WordPress. ¿Por qué ocurre?
El problema se encuentra en la forma en la que WordPress comprueba si hay algo programado.
En general para comprobar si hay algo programado, o realizar tareas rutinarias, en los sistemas se usa cron. Puedes programar en tu servidor de alojamiento tareas cron para que se ejecuten cada cierto periodo, por ejemplo cada media hora, cada hora, una vez al día, un día determinado de la semana, etc…
Cuando este cron se ejecuta en WordPress, mira si hay entradas programadas y las publica.
Pero WordPress, como no tiene acceso directo a tu servidor, no tiene un cron real, si no virtual. El cron de wordpress es el fichero wp-cron.php y se ejecuta cuando carga una página de tu WordPress.
¿Pero qué ocurre, si cuando tenias una entrada programada, no entra nadie a tu sitio web?, o bien y más habitual, estas usando un plugin de cache, como WP Super Cache o W3 Total Cache. Pues que este fichero se queda cacheado y no carga cuando debería, dando un error de programación perdida en posts.
Ese fue mi problema, usar W3 Total Cache, y Cloudfront. Y como no pienso renunciar a la velocidad que me da, necesito una solución.
Y tengo 2 soluciones a este problema
Te doy dos soluciones. Una más técnica, tocando en el servidor, y una a traves de plugin.
Me gusta más la primera, porque no necesitamos instalar un plugin más en nuestro WordPress. Y además no es difícil de realizar.
Solución 1. Programar un cron real para WordPress
Con esta solución lo que vamos a hacer es crear una tarea cron real en WordPress, para que sea el servidor el encargado de mirar que hay pendiente de hacer.
Para ello, si usas Cpanel, haz lo siguiente:
- Baja hasta Avanzado.
- Entra en Cron jobs o Tareas Cron.
- En agregar nueva tarea de Cron, Elige una configuración horaria predeterminada, o elige una a una.
- Y en comando inserta:
wget -O /dev/null http://tudominio.com/wp-cron.php?doing_wp_cron
- Recuerda sustituir tudominio.com por el de tu propia página Web.
- Si tienes unmultisitio, tendrás que crear una tareacron por cadasubsitio que tengas
- Si es subdominio: wget -O /dev/null http://subdominio.tudominio.com/wp-cron.php?doing_wp_cron
- Si es subdirectorio: wget -O /dev/null http://tudominio.com/subdirectorio/wp-cron.php?doing_wp_cron
- Para finalizar, cada vez que añadas uno, por supuesto haz clic en añadir tarea cron.
El tiempo es el que elijas, puedes ponerlo sin problemas cada 5 o 15 minutos, o cada hora. Diferente seria si esta tarea fuera algo que suponga mucha carga al servidor, pero no es el caso.
Solución 2. Instala un plugin.
En este caso el plugin se llama WP Missed Schedule Fix Failed Future Posts, y es muy sencillo de usar.
Instalar, activar y listo.
No lleva configuración. El solo se encarga de comprobar cada 5 minutos si algún post esta en estado «programación perdida», y lo auto-publica.
¿Y yo qué solución he usado?
Pues he usado la primera solución, y si estas leyendo este artículo es que funciona. Intento dentro de lo posible no instalar plugins, para no sobrecargar mi WordPress, que ya ando al limite.
No me parece tan complicado de realizar el crear tu propia tarea cron, y es algo que lo haces una vez y listo.
Te recomiendo crear ya tu tarea cron, incluso aunque nunca hayas tenido este error, y así nunca te encontraras el temido Programación perdida en WordPress.
¿Has tenido alguna vez este error? ¿Como has solucionado la programación perdida en WordPress?