logooneasesoria4

¿Necesita una consulta gratuita?

Cómo cambiar la frecuencia de WP-Cron sin desactivarlo

A diferencia de un cron de sistema tradicional que programa tareas para tiempos específicos (por ejemplo, «cada hora a los 5 minutos después de la hora»), WP-Cron usa intervalos para simular un cron de sistema.

WP-Cron recibe dos argumentos: el tiempo para la primera tarea y un intervalo (en segundos) después del cual se debe repetir la tarea. Por ejemplo, si programas una tarea para que comience a las 2:00 p. m. con un intervalo de 300 segundos (cinco minutos), la tarea se ejecutará primero a las 2:00 p. m. y luego nuevamente a las 2:05 p. m., luego nuevamente a las 2:10 p. m. y así sucesivamente, cada cinco minutos.

Para simplificar las tareas de programación, WordPress proporciona algunos intervalos predeterminados y un método sencillo para añadir intervalos personalizados.

Los intervalos predeterminados proporcionados por WordPress son:

  • Cada hora
  • Dos veces al día
  • A diario
  • Semanalmente (desde WP 5.4)

Ahora bien, este modo de programación por defecto se puede modificar de varias maneras…

Desactivar WP-Cron y activar un cron de sistema

Como ya hemos visto anteriormente, se puede desactivar el cron de WordPress (WP-Cron) y crear un cron de sistema real, configurado como te comentaba al principio. Esto suele ser una táctica de optimización habitual en sistemas sobrecargados, cuando es posible, y los requisitos de la web no lo impiden.

Pero esto es justo lo que no queremos hacer hoy, sino que vamos a apostar por WP-Cron, por el cron de WordPress, para hacer modificaciones que nos permitan controlar su funcionamiento y, en consecuencia, el consumo de recursos de nuestra instalación.

Tenemos 2 maneras de manipular WP-Cron…

Evitar que un mismo proceso se ejecute con demasiada frecuencia

Si lo que queremos es impedir que un mismo proceso se ejecute demasiado frecuentemente, podemos definir cuánto tiempo debe esperar cada proceso cron de WordPress para poder volver a ejecutarse.

Se consigue añadiendo una línea como la siguiente al archivo wp-config.php:

/* Definir frecuencia procesos cron */
define( 'WP_CRON_LOCK_TIMEOUT', 120 );

Con esta línea estamos indicando que cada proceso cron solo puede volver a ejecutarse después de 2 minutos (120 segundos) desde la ejecución anterior.

Crear intervalos personalizados de ejecución de WP-Cron

Otro método de controlar la ejecución de WP-Cron es creando una función que nos permita definir intervalos a medida de nuestras necesidades.

Lo primero que debemos hacer es elegir un intervalo en el que WP-Cron repetirá la tarea. Como hemos visto al principio, por defecto, los intervalos de WordPress son hourly (cada hora), twicedaily (dos veces al día), daily (cada día) y weekly (semanalmente). Y aunque cubre un espectro bastante amplio, puede que necesitemos un intervalo personalizado, que podemos añadir con un código como el siguiente, eligiendo el método que prefieras:

/* Nuevo intervalo personalizado de wp-cron */
add_filter('cron_schedules', function ($schedules) {
return array_merge($schedules, [
// este es el nombre del intervalo personalizado, a usar cuando se cree una nueva tarea
'five_hours' => [
// el siguiente numero representa segundos, en este ejemplo: 5 hours * 60 minutes * 60 seconds
'interval' => 5 * 60 * 60,
'display' => esc_html__('Cada cinco horas'),
],
]);
});

Ya con lo anterior, añadido el nuevo intervalo mediante el filtro cron_schedules, ya podemos crear tareas recurrentes de WP-Cron.

Para añadir añadir una nueva tarea de WP-Cron tenemos que añadir un nuevo shortcode y añadir una programación al shortcode. El intervalo (el segundo argumento de la función wp_schedule_event()) debe ser uno de los intervalos por defecto de WordPress, o el del nombre personalizado que añadiste usando el código anterior.

/* Tarea cron usando intervalo personalizado de cada cinco horas */
add_action('YOUR_NAME_HERE', function () {
/* Aquí va la tarea cron
Puedes usar cualquier función de WordPress
p.ej. wp_insert_post() */
});
// A continuación comprobamos que el evento no estaba programado, ya que cada llamada crea uno nuevo
// en caso contrario, si no hacemos la comprobación, se creará un nuevo evento en cada petición de usuario
if (!wp_next_scheduled('PONLE_NOMBRE')) {
/* El primer argumento es la marca temporal que controla cuando 
se ejecutará por primera vez la tarea
el siguiente argumento refleja el intervalo elegido */
wp_schedule_event(time(), 'five_hours', 'PONLE_NOMBRE');
return;
}

En este código hemos añadido la programación personalizada que generamos antes, de cada cinco horas.

El ejemplo anterior añade una tarea que ejecuta el cron de manera recurrente. Pero también podemos programar una tarea única.

Para conseguirlo tendríamos que usar la función wp_schedule_single_event() en vez de wp_schedule_event(). Esta función acepta 2 tipos de argumentos: marca temporal con el momento de la siguiente ejecución, y el gancho que contiene la tarea.

Con este ejemplo crearíamos una tarea que se ejecutará una sola vez, dentro de 5 horas:

/* Ejecutar tarea cron una sola vez dentro de cinco horas */
add_action('PONLE_NOMBRE', function () {
/* Aquí va la tarea cron
Puedes usar cualquier función de WordPress
p.ej. wp_insert_post() */
});
// A continuación comprobamos que el evento no estaba programado, ya que cada llamada crea uno nuevo
// en caso contrario, si no hacemos la comprobación, se creará un nuevo evento en cada petición de usuario
if (!wp_next_scheduled('PONLE_NOMBRE')) {
// Como antes, El primer argumento es la marca temporal que controla cuando se ejecuta la tarea
// se muestra en segundos y la fórmula es: 5 hours * 60 minutes * 60 seconds
wp_schedule_single_event(time() + 5 * 60 * 60, 'PONLE_NOMBRE');
return;
}

Como puedes ver, el cron de WordPress, WP-Cron, permite muchas posibilidades a la hora de controlar la ejecución de tareas y sus intervalos, para que tengamos un control total de la ejecución de trabajos cron en nuestra web.

¿Te gustó este artículo?
  • It iss trulyy a niuce and helpful piecee off info. I amm
    satisfcied thazt yoou shared thjs helpful infro witth us.
    Please keeep uss informed ike this. Thank you ffor sharing.

  • Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

Déjanos tus comentarios..!

30 de mayo de 2023

RECIBE

GRATIS

Recursos para tu web GRATIS.

En agradecimiento por haber leido nuestro blog te ofrecemos algúnos plugins, temas y asesoría para el desarrollo de tu sitio web.
Envía correo y espera respuesta...Gracias..!
baneranunciopluginsbest
Publicaciones Relacionadas
Abrir chat
One Asesoría
Hola 👋
¿Necesita cotizar una página o tienda online, cómo podemos ayudarle..?