Es posible que alguna vez hayas programado un post para ser publicado en un momento del día concreto y cuando has entrado a tu blog has visto como el post aun no se había publicado. Esto es algo que puede ocurrir de forma habitual, y puede resultar muy frustrante, además de perder una oportunidad de obtener las visitas que se esperaba tener al programar la publicación del post a una hora concreta.
Para comprender por qué ocurre, necesitamos saber que el WP-Cron no es un cron job real. De hecho es un cron virtual que solo se ejecuta cuando una página se carga (por ejemplo cuando accede un usuario al blog o a una página o post). Esta forma de ejecutar el cron virtual tiene un problema de rendimiento si tienes muchos eventos que ejecutar, o tardan demasiado en terminar.
Las razones por las que WP-Cron falla pueden ser las siguientes:
– Problemas de DNS en el servidor
– Conflicto con plugins
– Gran carga del servidor que provoca que WP-Cron no se ejecute comletamente
– Bug en WordPress
– El uso de plugins de caché que evitan que WP-Cron se ejecute
Hay muchas formas de solucionar el problema de WP-Cron. Para esta guía la que voy a proponer es la de desactivar el cron virtual de WordPress y usar un cron job real.
¿Por qué usar un cron job real?
Al usar un cron job real te aseguras que todos los eventos que has programado se ejecuten. Para blogs con altos niveles de tráfico usar un cron job real puede reducir el ancho de banda y las posibilidades de que tu servidor se caiga; especialmente si en ese momento estás experimentando el efecto Menéame.
Ejecutando un cron job real
Para configurar un cron job real, necesitaremos acceso por consola a nuestro servidor para poder editar el archivo /etc/crontab.
Tendremos que escribir el siguiente comando (Si usas Debian deberás identificarte como root):
sudo nano /etc/crontab
Ponemos el cursor al final del archivo, y escribimos la siguiente línea:
*/15 * * * * usuario wget -q -O - http://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Remplaza http://tudominio.com por la URL de tu sitio. Y «usuario» por el usuario que ejecute la tarea (debe ser un usuario del sistema, no del blog; normalmente root).
Esta línea le indica al sistema que debe ejecutar ese comando cada 15 minutos.
Guardamos.
Ahora tendrás que tocar un poquito de código. Tranquilo es muy sencillo.
Abre el archivo wp-config.php, y añade la siguiente línea al principio del archivo:
define('DISABLE_WP_CRON', true);
Guarda y súbelo al servidor. Esto deshabilitará el cron virtual de WordPress.
Eso es todo.
Para probar que está funcionando bien, puedes probar a programar un post para dentro de 5 ó 10 minutos después de que hayas completado la configuración de arriba. Espera y mira si el cron virtual de WordPress se ha ejecutado. Sí se publica el post, felicidades, has ejecutado con éxito un cron real para WordPress. Si no se publica comprueba que has seguido correctamente los pasos indicados, por si has cometido algún error. Otra posibilidad que tienes es contactar con tu hosting y que sean ellos los que te lo configuren por tí.