Cómo funciona el cron de WordPress

Publicado: 2021-12-03

¿Alguna vez te has preguntado qué es WP-Cron? Si es así, este es el artículo perfecto para que aprendas todo lo que necesitas saber sobre las tareas programadas de WordPress.

Cron (Command Run On) es una utilidad que comenzó en los sistemas UNIX y luego evolucionó en las distribuciones LINUX y se propuso como un programador de trabajos basado en el tiempo.

Un trabajo cron es una tarea que se realiza de forma repetitiva o como una tarea única. A lo largo de los años, se ha utilizado principalmente como una herramienta de administración del sistema para ejecutar tareas automáticamente.

Cron de WordPress

Mientras se ejecuta un sitio web de WordPress, se realizan algunas tareas en segundo plano que deben ejecutarse periódicamente, como verificar actualizaciones de temas y complementos, publicaciones programadas, transitorios para eliminar y muchos más. Estas tareas programadas basadas en el tiempo son manejadas por WP-Cron.

En su instalación de WordPress, el archivo relacionado con los trabajos cron es el archivo wp-cron.php , ubicado en la carpeta raíz de su instalación.

El archivo wp-cron.php contiene el código para las tareas automatizadas relacionadas con actualizaciones y publicaciones.

Cómo funciona

El WP-Cron verifica la lista de tareas en cada carga de página y se ejecuta en consecuencia.

Si en el momento en que se carga la página, vence una tarea, se agrega a una cola. De esa forma, WordPress garantiza que incluso los eventos debidos se activarán y no se omitirán y, finalmente, todas las tareas se ejecutarán en la carga de esa página.

Es natural si esto te parece irracional, pero piensa en la alternativa. En un entorno de alojamiento compartido, como es en su mayoría, debe tener acceso a los comandos del servidor para controlar estas tareas como mejor le parezca, pero ¿no sería eso arriesgado para el servidor?

Entonces, considere lo que hace WordPress como una solución en esta situación. Sin embargo, esto tiene algunos inconvenientes que examinaremos en un momento.

El complemento WP-Crontrol

Una forma excelente y fácil de ver la lista de trabajos cron en su sitio web de WordPress es instalar el complemento WP-Crontrol.

Después de activarlo, puede ver la página de administración del complemento en el elemento de menú Herramientas->Eventos de Cron. En una instalación Vanilla verás algo como esto:

Si pasa el mouse sobre cada fila, notará que se proporcionan acciones para editar o ejecutar cualquiera de los eventos.

En la pantalla de edición del evento wp_update_themes por ejemplo, puedes modificar su configuración

En el elemento de menú Configuración -> Cronogramas de Cron, puede ver los cronogramas predeterminados y, si lo desea, agregar uno propio y asignarle un nombre para verlo en la lista.

Cómo crear un trabajo cron

Para agregar un trabajo cron manualmente, todo lo que tiene que hacer es editar el archivo functions.php del tema. Para demostrar un ejemplo simple, ábralo con su editor favorito y agregue el siguiente código:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Donde 'my_cronjob' es el nombre de su enlace y 'my_cronjob_function' es el nombre de su función que simplemente enviará un correo electrónico a la dirección que definió reemplazando EMAIL_ADDRESS con la deseada.

A continuación, debemos programar este gancho para que se ejecute a la hora que queramos.

Cómo ejecutar el trabajo una vez

Para realizar la acción como un trabajo de WP-Cron de una sola vez, tenemos que usar la función incorporada de WordPress wp_schedule_single_event() que está diseñada para activar un enlace en un momento específico. Su estructura es así:

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Donde $timestamp es la marca de tiempo de Unix para la próxima ejecución del evento y $hook es el gancho de acción que se ejecutará cuando se ejecute el evento.

Ambos parámetros son obligatorios. Ahora hablemos de los parámetros opcionales.

Con el parámetro $args puede usar una matriz que contiene argumentos para pasar a la función de devolución de llamada del gancho. Cada valor de la matriz se pasa a la devolución de llamada como un parámetro individual. Las claves de matriz se ignoran.

El parámetro $wp_error se puede usar para devolver un WP_Error en caso de falla. Su valor por defecto es falso.

El código correspondiente en nuestro archivo functions.php sería así:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

En este punto, debería poder ver su tarea personalizada en la lista.

Cómo ejecutar el trabajo como un evento recurrente

Lo que WordPress proporciona para este escenario es la función wp_schedule_event() que está estructurada así

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

El parámetro $timestamp es la marca de tiempo de Unix requerida para la próxima ejecución del evento, $recurrence también es una cadena requerida para la frecuencia con la que el evento debe repetirse posteriormente y $hook es el enlace de acción para ejecutar cuando se ejecuta el evento.

Los parámetros opcionales $args y $wp_error son los mismos que antes.

El código que ejecuta el trabajo con una recurrencia de, digamos, 1 hora es este:

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Usamos la función wp_next_scheduled() en una declaración 'si' como la que ve arriba, para evitar eventos duplicados y asegurarnos de que la tarea no esté programada antes de continuar y ejecutarla.

También usamos la etiqueta 'por hora' de la tabla programada en Configuración -> Programas cron. Si quisiéramos una ocurrencia diferente, digamos cada 45 minutos, primero deberíamos crear un cronograma personalizado llamado "45_minutos" y luego usarlo en el código.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

En este punto, debería poder ver su tarea personalizada en la lista con los cambios esperados:

Inconvenientes de WP-Cron

La forma en que WordPress maneja los trabajos cron asegura que la tarea se ejecutará pero no le permite especificar cuándo porque, como dijimos, la verificación se realiza cuando un visitante carga una página de su sitio web.

Si transmitimos el control de trabajos cron sobre el tiempo de visita de los usuarios, entonces es posible que tengamos un impacto negativo en el sitio web sin importar el tamaño o la popularidad.

Aloje su sitio web con Pressidium

GARANTÍA DE DEVOLUCIÓN DE DINERO DE 60 DÍAS

VER NUESTROS PLANES

En el caso de un sitio web popular, experimentará una gran cantidad de tráfico debido a la ejecución simultánea de una gran cantidad de tareas. Esto puede consumir los recursos de su servidor y afectar el rendimiento o incluso provocar el tiempo de inactividad de su sitio web.

En el caso de un sitio web pequeño, lo que significa pocos visitantes, el wp-cron no se activará con tanta frecuencia, por lo tanto, algunos trabajos cron importantes pueden posponerse durante el tiempo suficiente para crear efectos secundarios, como no realizar suficientes copias de seguridad o retrasar la actualización de algunos. datos que se cuentan en un trabajo cron.

Deshabilitar WP-Cron

Si la forma en que WP-Cron maneja los trabajos cron no cumple con sus requisitos y necesita que las tareas se ejecuten a tiempo, entonces debe deshabilitar WP-Cron y usar un servicio cron del lado del servidor.

Si deshabilitar WP-Cron no es una opción ya proporcionada por su proveedor de alojamiento, así es como puede hacerlo usted mismo.

Abra el archivo wp-config.php , ubicado en la carpeta raíz de su instalación, con su editor favorito y busque las líneas relacionadas con el prefijo de la tabla de la base de datos. Inmediatamente después, inserte esta línea:

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Esto es obligatorio si desea utilizar un programador más estable, como el servicio cron de Linux para activar wp-cron.php cuando le convenga mejor.

Una solución del lado del servidor: el servicio Cron de Linux

En Pressidium, usamos Linux Crontab para activar WP-Cron cada 5 minutos. Es la cantidad de tiempo adecuada lo que garantiza que sus trabajos programados se ejecuten a tiempo y, al mismo tiempo, evite sobrecargar su sitio web de WordPress. Esto no interfiere con el programador de WP-Cron, sino solo con el mecanismo de activación.

Conclusión

Esperamos que este artículo lo haya ayudado a familiarizarse con WordPress Cron, qué es y cómo funciona, y cómo crear sus propios horarios y tareas. Piense dos veces si WP-Cron es suficiente para sus requisitos, antes de elegir otras soluciones del lado del servidor.