• code
  • wordpress
  • heroes
  • community
  • developers
  • inspire
Loaded
Post Image

En este artículo vamos a explicar cómo trabajar con el sistema de cron en WordPress. Analizamos desde cero la funcionalidad para ejecutar tareas programadas en el CMS.

Lo que conseguirás al utilizar un cron o tarea programada es ejecutar un código de forma repetitiva con una periodicidad fija. Por ejemplo podrás hacer saltar un programa cada hora que se encargue de enviar un correo electrónico con un aviso a tus usuarios.

Utilizar los intervalos programados por defecto en WordPress

El propio núcleo de WordPress tiene integrados varios intervalos de tareas programadas por defecto para facilitar el desarrollo. En concreto utiliza tres crones que son muy habituales en la programación de aplicaciones:

  • Ejecución de tareas cada hora
  • Ejecución de tareas cada día
  • Ejecución de tareas dos veces al día

Vamos a emplear con fines didácticos el intervalo de ejecución de tareas diario. Simplemente ejecutaremos un código que envíe un correo electrónico cada día.

Código para ejecutar un código a través del cron diario
function wph_cron_schedule() {
  if (!wp_next_scheduled('wph_cron_daily')){
    wp_schedule_event(time(), 'daily', 'wph_cron_daily');
  }
  /*wp_unschedule_event(wp_next_scheduled('wph_cron_five_minutes'), 'wph_cron_five_minutes', array());*/
}
add_action('wp', 'wph_cron_schedule');

function wph_cron_daily_function() {
  wp_mail('info@wordpress-heroes.com', 'Cron Worked', date('r'));
}
add_action('wph_cron_daily', 'wph_cron_daily_function');

function wph_cron_schedule() {
  if (!wp_next_scheduled('wph_cron_daily')){
    wp_schedule_event(time(), 'daily', 'wph_cron_daily');
  }

  /*wp_unschedule_event(wp_next_scheduled('wph_cron_five_minutes'), 'wph_cron_five_minutes', array());*/
}
add_action('wp', 'wph_cron_schedule');

function wph_cron_daily_function() {
  wp_mail('info@wordpress-heroes.com', 'Cron Worked', date('r'));
}
add_action('wph_cron_daily', 'wph_cron_daily_function');

En el código establecemos una cascada de eventos para enlazar nuestras funciones con el núcleo de WordPress. En primer lugar asociamos la función wph_cron_schedule a la acción wp. Esto nos permite después desarrollar en nuestra función el código que se ejecutará en la carga de WordPress.

En este caso vamos a crear una programación a través de la función wp_schedule_event. Simplemente mediante el condicional le decimos al sistema que si no se ha programado ya un evento basado en la función wph_cron_daily, que se guarde en el sistema a partir de ahora.

Lo que hace WordPress es almacenar esta función wph_cron_daily que desarrollamos después para ejecutarla cada día a partir del momento en el que la guarda. Es decir que todos los días a partir de hoy WordPress ejecutaría el código que esté en la función wph_cron_daily a esta misma hora.

Es importante que entiendas que WordPress trabaja a nivel de código, por lo que se ejecutará el cron siempre que el servidor cargue el código. Y para que se produzca esta ejecución tiene que exisitir una visita a la página. Si no existe esta visita no se ejecutará el cron.

Hay otros sistemas de tareas programadas basadas en el reloj interno del servidor que alberga la página web. Esta modalidad es más compleja y está alejada de las pretensiones de este artículo. Sin embargo, generalmente con el sistema de cron de WordPress suele ser suficiente en la mayoría de las instalaciones.

En definitiva, WordPress ejecutará el código de nuestra función wph_cron_daily_function todos los días a esta misma hora. Y como ves en el fragmento simplemente enviará un correo electrónico a través de la función wp_mail. Es una aproximación sencilla, pero imagina todo lo que se podría conseguir con este sistema.

Un apunte más. Comentada encontrarás la función wp_unschedule_event que lo que hace es eliminar la tarea programada de la base de datos para que deje de ejecutarse. Es una función interesante para limpiar la programación de funciones obsoletas o eliminadas que ya no quieres que se ejecuten en tu instalación.

Crear un nuevo cron en WordPress

Es posible que quieras establecer un envío de correos más frecuente que lo que te permite WordPress por defecto. Imagina que necesitas que tu función se ejecute cada cinco minutos.

Como ves en los intervalos por defecto que te indicábamos antes no se incluye un intervalo de cinco minutos. Sólo tendrías la posibilidad de enviar un correo electrónico cada hora, cada día o dos veces al día.

Para lograr esto lo primero es establecer un nuevo intervalo de tiempo para que WordPress lo pueda entender:

Código para crear un nuevo intervalo para tareas programadas
function wph_cron_five_minutes_schedule($schedules) {
  $schedules['wph_five_minutes'] = array(
    'interval' => 300,
    'display' => __('Every 5 minutes', 'wph-heroes')
  );
  return $schedules;
}
add_filter('cron_schedules','wph_cron_five_minutes_schedule');

function wph_cron_five_minutes_schedule($schedules) {
  $schedules['wph_five_minutes'] = array( 'interval' => 300, 'display' => __('Every 5 minutes', 'wph-heroes'));
  return $schedules;
}
add_filter('cron_schedules','wph_cron_five_minutes_schedule');

Con este sencillo código estaría resuelto. La función wph_cron_five_minutes_schedule se encarga de añadir al array schedules del núcleo un nuevo intervalo a través de dos elementos. El intervalo en segundos, en este caso 300 segundos equivalentes a 5 minutos; y la etiqueta bajo la que WordPress guardará esta programación.

Una vez que hemos modificado el array de programaciones del sistema y hemos incluido nuestro nuevo periodo personalizado de cinco minutos sólo nos queda utilizarlo.

Y lo haremos de la misma forma que lo hacíamos antes, con la diferencia que ahora en vez de emplear el identificador de las etiquetas por defecto de WordPress ya podremos aplicar nuestra propia nueva definición:

Código para ejecutar un código en un cron personalizado

function wph_cron_schedule() {
  if (!wp_next_scheduled('wph_cron_five_minutes')){
    wp_schedule_event(time(), 'wph_five_minutes', 'wph_cron_five_minutes');
  }
}
add_action('wph_cron_five_minutes', 'wph_cron_five_minutes_function');

function wph_cron_five_minutes_function() {
  wp_mail('info@wordpress-heroes.com', 'Five Minutes Cron Worked', date('r'));
}

function wph_cron_schedule() {
  if (!wp_next_scheduled('wph_cron_five_minutes')){
    wp_schedule_event(time(), 'wph_five_minutes', 'wph_cron_five_minutes');
    }
  }
add_action('wph_cron_five_minutes', 'wph_cron_five_minutes_function');

function wph_cron_five_minutes_function() {
  wp_mail('info@wordpress-heroes.com', 'Five Minutes Cron Worked', date('r'));
}

Como ves el código es equivalente al que utilizábamos más arriba para la programación horaria. En este caso se modifica la etiqueta identificativa del cron que acabamos de crear wph_cron_five_minutes. Y también cambia por supuesto la función que se asocia con esta etiqueta y con este nuevo cron wph_cron_five_minutes_function.

Prev
Modificar el listado de usuarios en el panel de administración de WordPress
Next
Crear un Avatar Hablante con HTML5 y JQuery

close
close
close
close

Task removal

The task will be completely deleted. This process cannot be reversed and the task cannot be recovered.

Añadir subtarea
Número de Identificación Fiscal. El número único de identificación personal español.
Número de Afiliación. El número único de identificación del trabajador español.
Código de Identificación Fiscal. El identificador único español de una empresa.
Código de Cuenta de Contribución. Número que la Seguridad Social española atribuye a todos los empresarios y sujetos responsables del pago de cotizaciones al sistema, para controlar el cumplimiento de las cotizaciones y otros conceptos.
add
add
add
add
El sistema agregará esta cantidad máxima de minutos al horario de trabajo diario de forma aleatoria.
Máximo número de minutos a reducir las horas de trabajo
Cargando...
close
close
close
close