Alguna vez has programado una entrada en WordPress y no se ha realizado la publicación de la misma, apareciendo un mensaje de que se ha perdido la programación? Esto ocurre porque no se ha ejecutado a tiempo el archivo wp-cron.php de WordPress.
WordPress gestiona la programación de las entradas con una tarea automatizada lanzada por wp-cron.php. Este archivo se ejecuta con cada llamada a una página del WordPress, incluyendo las visitas de los robots de los buscadores y cualquier otro tipo de robot (por ejemplo los de semalt).
¿Qué es un cron / cron job? Según la Wikipedia, un cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab. El nombre cron viene del griego chronos (χρόνος) que significa «tiempo». Cron se podría definir como el «equivalente» a Tareas Programadas de Windows.
¿Para que necesita WordPress que se ejecute el archivo wp-cron.php? Este archivo hace que se ejecute la búsqueda de actualizaciones de los temas y plugins, envíos de pingbacks, plugins de copias de seguridad y la programación de la publicación de entradas. Por tanto es imprescindible para el correcto funci0namiento y actualización de WordPress.
En sitio webs con pocas visitas la ejecución del wp-cron.php cada vez que se carga una página no representa un problema. Pero para revistas digitales, periódicos, etc. su ejecución constituye un verdadero quebradero de cabeza, porque su consumo de recursos puede llegar a agotar los recursos del procesador del servidor.
Hay que tener en cuenta que el problema principal está en que WordPress ejecuta el archivo wp-cron.php cada vez que se llama a una página de WordPress. Si tenemos 5.000 páginas vistas por día, son 5.000 llamadas al archivo wp-cron.php por día. Con ejecutar el archivo wp-cron.php una vez cada 15 minutos, tendremos suficiente; y esto al cabo del día son 96 llamadas al archivo wp-cron.php.
Para desactivar la ejecución de wp-cron.php con cada llamada a una página de WordPress, hay que añadir una línea al archivo wp-config.php, que es el archivo que contiene la configuración del acceso a la base de datos por parte de WordPress y algunos ajustes más. Debajo de las siguientes líneas:
/** Cotejamiento de la base de datos. No lo modifiques si tienes dudas. */
define('DB_COLLATE', '');
hay que añadir:
/** Desactivar wp-cron.php */
define('DISABLE_WP_CRON', true);
No obstante como hemos visto anteriormente, la ejecución del archivo wp-cron.php es necesaria para el correcto funcionamiento de WordPress y como ya no se ejecuta por parte de WordPress, hay que hacer que el servidor ejecute el archivo cada 15 minutos.
A continuación vamos a explicar como se puede hacer en cPanel y en Plesk. En caso de que no tengáis alguno de estos dos paneles de administración o no estéis seguros de como configurarlo, lo mejor es enviar un ticket de soporte a vuestro servicio de alojamiento web para que lo hagan ellos o utilizar un servicio externo como Easy Crons.
Easy Crons permite crear tareas de cron de forma gratuita que ellos ejecutan en el intervalo de tiempo que nosotros le marquemos. Para crear el cron de WordPress, simplemente hay que configurar una llamada a http://www.dominio.com/wp-cron.php?doing_wp_cron (sustituyendo www.dominio.com por el dominio donde se encuentra el WordPress). El único problema que puede surgir al hacerlo de esta forma es con plugins de seguridad como iThemes Security que bloquea el acceso de estos servicios externos y para que funcione hay que eliminar la siguiente línea del archivo .htaccess del WordPress:
RewriteCond %{HTTP_USER_AGENT} ^Wget [NC,OR]
Cómo crear una tarea cron para ejecutar el archivo wp-cron.php en cPanel:
1) En cPanel vamos a la sección AVANZADO / CRON JOBS.
2) En la configuración manual seleccionaremos: Cada 5 minutos (*/5).
3) En el parámetro Minuto lo cambiaremos por */15, el resultado deberá ser el siguiente:
Minuto: */15 Cada 15 minutos (*/15)
Hora: Cada hora (*)
Día: Cada día (*)
Mes: * Cada mes (*)
Día de la semana: * Cada día de semana (*)
4) Y finalmente tendremos que introducir el siguiente comando a ejecutar (ojo: hay que cambiar el nombredeusuario por el nombre de usuario de cPanel; sino no funcionará):
php -q /home/nombredeusuario/public_html/wp-cron.php
5) Hacemos click en «Agregar nueva tarea de Cron» y nos aparecerá creada la tarea en las tareas actuales de Cron.
En el paso 4 también se puede hacer la llamada con el nombre de dominio, en vez del usuario de cPanel (reemplazando www.dominio.com por el dominio en el cual debe ejecutarse el archivo wp-cron.php):
wget -q -O - http://www.dominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Cómo crear una tarea cron para ejecutar el archivo wp-cron.php en Plesk:
1) En Plesk vamos a la sección ADDITIONAL TOOLS / SCHEDULED TASKS (en Plesk en castellano no se como se llama exactamente porque tenemos siempre todas las instalaciones de Plesk en inglés, pero debe ser algo como Herramientas adicionales / Tareas programadas).
2) Seleccionamos el usuario de sistema que va a ejecutar la tarea programada. Aquí hay que seleccionar el usuario de sistema de Plesk.
3) En el parámetro Minuto lo cambiaremos por */15.
Hora: *
Día: *
Mes: *
Día de la semana: *
4) Y finalmente tendremos que introducir el siguiente comando a ejecutar (ojo: hay que reemplazando www.dominio.com por el dominio en el cual debe ejecutarse el archivo wp-cron.php):
wget -q -O - http://www.dominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
5) Hacemos click en «Agregar nueva tarea programada» y nos aparecerá creada la tarea en las tareas actuales de Cron.
6) Si queremos, en Plesk podemos configurar que se nos envíe un email cada vez que se ejecute el Cron. Esto es una buena forma de comprobar si funciona correctamente la tarea programada creada.
De esta forma ya tendremos configurada la ejecución del archivo wp-cron.php por parte del servidor.
OJO: Lo dicho anteriormente: Si tienes pocas visitas en tu web, esto no es imprescindible hacerlo. A partir de 100 páginas vistas por día, ahorras recursos de servidor.
Si tienes dudas o quieres comentar algo, déjame un comentario. Si te ha gustado, comparte ;-).
Estupendo artículo. Me ha servido de muchos. Muchas gracias.
Hola Noé. Nos alegra que te haya servido. Saludos.