El CRON de WordPress (WP-CRON)

Fecha: 25/07/2022
Antes de empezar a escribir este post, ya lo puedo definir como una guía completa del CRON de WordPress y todas sus funcionalidades.

Para ejecutar tareas programadas o periódicas, WordPress implementa un CRON virtual ejecutado con cada visita mediante el wp-cron.php.

cron wordpress

Esto es algo bueno y malo:

  • Ventaja: WordPress puede ejecutar tareas programadas o periódicas sin necesidad de ninguna configuración avanzada.

  • Desventaja: El wp-cron.php de WordPress se ejecuta con cada visita para comprobar si existen tareas para ejecutar, lo que consume recursos (sobre todo en instalaciones complejas, sin cache de página y con mucho tráfico).


Como puedes ver, el wp-cron.php de WordPress tiene ventajas y desventajas, pero para que nuestro WordPress funcione de manera adecuada, las tareas programadas deben ejecutarse correctamente.

Vamos a empezar con la guía ;)

Índice del artículo
  • ¿Para qué sirve el CRON de WordPress?
  • Ventajas y desventajas del CRON de WordPress
  • Desactivar el CRON de WordPress
  • 1 - Desactivar la ejecución del wp-cron.php con cada visita
  • 2 - Añadir la tarea programada al CRON de Linux
  • 3 - Comprobar la ejecución del CRON en WordPress
  • Ver tareas del CRON de WordPress
  • Limpiar el CRON de WordPress
  • Programaciones perdidas en WordPress

¿Para qué sirve el CRON de WordPress?


Si tuviéramos que resumirlo, podríamos decir que el CRON de WordPress sirve para ejecutar las tareas programadas. Pero a mí me gusta que veas la parte práctica de las cosas.

Si WordPress no tuviese un CRON virtual, tendrías que configurar el CRON de Linux manualmente. De lo contrario, si el CRON no estuviese ejecutando tareas programadas, ciertas funcionalidades a las que estamos acostumbrados dejarían de funcionar:

  • Dejarían de funcionar las actualizaciones automáticas del núcleo, plugins y themes.

  • No se harían las copias de seguridad automáticas mediante ciertos plugins.

  • WooCommerce no tendría estadísticas ni tampoco funcionarían bien los pedidos.

  • Los plugins de membresías y suscripciones dejarían de funcionar.

  • Los plugins de estadísticas o recuperación de datos estadísticos mediante APIs dejarían de funcionar, incluidas funcionalidades de plugins como RankMath SEO.


Al final, el WP-CRON de WordPress es utilizado por muchísimos plugins para ejecutar tareas y hacer posible que tengamos ciertas funcionalidades.

Voy a ponerte varios ejemplos aún más específicos que los anteriores:

  • El plugin Broken Link Checker usa el WP-CRON para ejecutar los análisis programados cada cierto tiempo y también para ejecutar por lotes cuando hay muchos enlaces para comprobar.

  • El plugin WP Rocket utiliza el CRON de WordPress para determinar el tamaño del cache guardado en el directorio correspondiente y también para la funcionalidad de Unused CSS mediante API externa.

  • El plugin Elementor utiliza una tarea programada para enviar datos estadísticos a los desarrolladores.


Esto solo son ejemplos pero, al igual que el API Heartbeat (admin-ajax.php), el WP-CRON de WordPress es una de las funcionalidades que nos permiten tener ciertas comodidades, aunque mucha gente no sabe que existe.

Ventajas y desventajas del CRON de WordPress


Aunque el WP-CRON es una de las grandes ventajas de WP, también tiene desventajas.

  • Ventajas: El CRON de WordPress nos proporciona un apoyo indispensable para los plugins y, al no requerir configuración, puede funcionar sin necesidad de que el usuario configure nada en el CRON del servidor o hosting.

  • Desventajas: Precisamente para evitar que el usuario tenga que configurar nada en el CRON de Linux, el archivo wp-cron.php de WordPress se ejecuta con cada "hit" no cacheada al sitio web, lo que puede provocar sobrecargas y consumos de recursos innecesarios en el hosting o servidor.


Siendo sinceros, la ejecución de un pseudo-cron en cada clic es una forma de simplificar la implementación para usuarios que no tienen los suficientes conocimientos técnicos. No obstante, no es la forma más optimizada de hacerlo.

¿Te ha quedado claro? Precisamente por la única desventaja que tiene el WP-CRON de WordPress es la razón por la que se suele desactivar la ejecución continua del archivo wp-cron.php para lanzar su ejecución periódica y programada mediante el CRON de Linux.

Desactivar el CRON de WordPress


Antes de nada quiero decir que yo recomiendo desactivar el CRON de WP, lo que no significa que tengas que borrar el wp-cron.php (no se hace así).

Precisamente lo digo porque me suelo encontrar instalaciones con problemas por tener el wp-cron.php borrado debido a que al seguir una guía lo hicieron así.

archivo wp-cron.php

Realmente lo que buscamos no es desactivar el WP-CRON, sino cambiar el modo de ejecución para que sea más eficiente.

Vamos a desactivar la ejecución continua del archivo wp-cron.php con cada clic y hacer que se ejecute de forma periódica a través del CRON del servidor o hosting.

El proceso realmente es sencillo, pero hay que seguir estos pasos en este orden exacto.

1 - Desactivar la ejecución del wp-cron.php con cada visita


Lo primero que debemos hacer es evitar que WP ejecute con cada "hit" el wp-cron.php para comprobar si hay tareas programadas.

Para esto existe un parámetro que introducimos en el wp-config.php de WP y automáticamente se desactiva la ejecución continua del wp-cron.php.
define('DISABLE_WP_CRON', true);

¿No sabes dónde añadir el parámetro dentro del wp-config.php? Pues realmente hay varias posiciones recomendadas, pero a mí me gusta ponerlo debajo del "DB_COLLATE" de la base de datos.

desactivar cron wordpress

Con esto, ya tendremos la ejecución continua del WP-CRON desactivada. Ahora debemos hacer que se ejecute mediante el CRON de Linux.

2 - Añadir la tarea programada al CRON de Linux


Esta parte del proceso es indispensable, pero al mismo tiempo es variable. Dependiendo de tu hosting y del panel de control que utilice tu hosting, la interfaz para introducir tareas CRON al servidor puede variar bastante.

Como este es el blog de Raiola Networks, el proceso lo vamos a hacer en un cPanel de un hosting nuestro.

En cPanel debemos ir a buscar "Tareas cron" o "Cron tasks", dependiendo del idioma en el que tengas configurado el panel.

wp cron cpanel

Una vez que entramos a esta parte, veremos algo similar a esto en nuestra pantalla:

wp cron cpanel

Ahora debemos poner esta línea dentro del campo "Comando":
wget -q -O /dev/null -t 1 "https://tusitioweb.es/wp-cron.php?doing_wp_cron" >/dev/null 2>&1

Debes cambiar el "dominiodeejemplo" por tu propio dominio. El resto es exactamente igual.

En el resto de campos, yo lo dejaría así para que se ejecute el WP-CRON mediante el wp-cron.php cada 5 minutos:

wp cron tareas cpanel

Ya habremos cambiado el modo de ejecución del WP CRON de nuestro WordPress.

3 - Comprobar la ejecución del CRON en WordPress


Ahora que hemos cambiado el modo en el que se ejecuta el WP CRON, vamos a comprobar que se está ejecutando correctamente.

Ya no se ejecutará con cada visita, por lo que para revisar si funciona debemos tenerlo en cuenta y esperar el periodo de tiempo correspondiente. Si has seguido los pasos de este post, un máximo 5 minutos.

¿Cómo podemos comprobar la ejecución? Pues con un simple plugin.

Aunque existen varias formas de hacerlo, a mí me gusta "loggear" las ejecuciones viendo si se quedan en espera.

Para esto, voy a utilizar el plugin gratuito Advanced CRON Manager: https://es.wordpress.org/plugins/advanced-cron-manager/

wp cron servidor wordpress

Debes fijarte en la columna marcada, ya que es donde vas a poder ver si se está ejecutando correctamente el CRON. Lo que ves en la imagen es una instalación donde el WP CRON se está ejecutando correctamente.

Si hay muchas tareas pendientes con el contador a 0, es decir, que ya no marca tiempo para la siguiente ejecución, el CRON no se ha ejecutado. Si pasan más de 5 minutos (el tiempo que hemos configurado), el WP-CRON está fallando y no se está ejecutando con el CRON de Linux.

Si las tareas se van quedando apiladas sin volver a encolarse y sin salir el contador de tiempo, el wp-cron.php no se está ejecutando de ninguna manera y debemos revisar el paso 2 de este post para ver qué ha pasado.

Como son procesos técnicos, te recomiendo que hables con tu webmaster o incluso con tu proveedor de hosting, ya que normalmente el soporte puede ayudarte a configurar una tarea CRON en tu servidor.

Ver tareas del CRON de WordPress


¿Quieres ver las tareas programadas cargadas en el WP-CRON? Pues ya lo acabas de hacer si has seguido los pasos anteriores, ya que los plugins utilizados son más o menos los mismos que para comprobar si el CRON se está ejecutando correctamente.

Puedes hacerlo con el plugin Advanced CRON Manager:

plugin CRON WordPress

Como puedes ver, Advanced CRON Manager te permite ver tanto las tareas programadas como las programaciones.

Por si no lo apuntaste antes, puedes encontrar más información de Advanced CRON Manager aquí: https://es.wordpress.org/plugins/advanced-cron-manager/

Otro plugin que te permite hacer esto es WP Crontrol:

plugin php cron wordpress

Si quieres más información sobre WP Crontrol, puedes encontrarla aquí:

Y, por último, también está el plugin gratuito Cron Jobs:

php cron sitio web WordPress

Puedes encontrar más información sobre Cron Jobs aquí: https://es.wordpress.org/plugins/leira-cron-jobs/

Todos estos plugins no solo te permiten ver las tareas programadas configuradas en tu WordPress, sino que también puedes modificarlas o añadir nuevas (o incluso añadir nuevas programaciones):

cron jobs wordpress php

Para usuarios avanzados, el hecho de poder editar y añadir nuevas tareas programadas puede ser muy útil durante el mantenimiento o resolución de problemas en sitios web.

Limpiar el CRON de WordPress


Es normal que muchos plugins, al desinstalarse, dejen las tareas programadas en el CRON de WordPress.

Realmente, los elementos que se ejecutan mediante el wp-cron.php se encuentran en una fila dentro de la tabla wp_options de nuestro WP.

Existen muchos plugins que pueden detectar qué plugins han sido desactivados o desinstalados y qué tareas programadas han quedado registradas en el WP-CRON.

Evidentemente, estas tareas "fantasma" son un consumo de recursos inútil (mínimo, pero inútil). Lo ideal es borrarlas para evitar que estén ahí ejecutándose sin sentido.

Yo suelo recomendar el plugin Advanced Database Cleaner Pro. Sin embargo, no es el único.

limpiar wp-cron.php

La principal ventaja de Advanced Database Cleaner Pro es que detecta los CRON y te dice a qué plugin pertenecen y en base a eso comprueba si están activados.

Usuarios con más experiencia en WP y más conocimientos pueden utilizar otros plugins, como el que hemos visto anteriormente:

plugin cron wordpress

Como he dicho antes, aunque el impacto de los CRON "fantasma" es mínimo, instalaciones con muchos años encima y mucho "trote" pueden ser un caos si no hacemos una limpieza de base de datos y de CRONs de vez en cuando.

Programaciones perdidas en WordPress


Las programaciones perdidas por culpa de que no se ejecuta el WP-CRON en WordPress son uno de los problemas de los que la gente se suele quejar.

En algunas ocasiones pueden fallar los posts programados, es decir, que no se publican porque falla la tarea programada.

programacion perdida wordpress

Esto puede ocurrir por dos razones:

  • Tu web tiene muy poco tráfico y, al tener el wp-cron.php configurado de forma nativa, no llega a ejecutarse y, por lo tanto, no llegan a ejecutarse las tareas programadas.

  • Has configurado el wp-cron.php para ejecutarse con el CRON de Linux y no has realizado el proceso correctamente.


En base a estas dos afirmaciones, ya sabes cómo solucionarlo.
Álvaro Fontela
Álvaro Fontela

Alvaro Fontela es consultor WordPress especializado en WPO y rendimiento web, además de co-fundador y CEO de Raiola Networks.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 4 comentarios en El CRON de WordPress (WP-CRON)
Avatar del autor del comentario

Juan Pablo

20/06/2023 a las 04:43
¿Crees que el wp-cron se pueda usar para correr algun malware?
Responder
Avatar del autor del comentario

Alvaro Fontela

03/07/2023 a las 21:27
Puede ser posible si, en algún caso muy raro, alguna ejecución rara me he encontrado en el wp-cron.php de WordPress.
Responder
Avatar del autor del comentario

Taisa

28/08/2023 a las 08:38
En caso de tener bastantes sitios web en un hosting, y que el cron configurado en el servidor esté saltando a la vez para varios sitios... ¿De qué formas se podría hacer para que no coincidan tanto?

Indicas programarlo cada 5 minutos pero ¿Se podría configurar una periodicidad cada más tiempo para reducir la carga?

Gracias!
Responder
Avatar del autor del comentario

Alvaro Fontela

29/08/2023 a las 16:02
Hola Taisa, lo normal son 5 min, pero... puedes ponerle el tiempo que quieras, todo depende del uso que haga la instalación del WP CRON. Yo en instalaciones muy básicas a veces lo pongo cada hora, pero...en un WooCommerce por ejemplo es algo impensable, por la cantidad de CRONS que se ejecutan continuamente.
Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *