WP-Cron pour planifier des tâches récurentes

wp-cron

WP-Cron est un programme qui permet d’exécuter périodiquement un script.

Historiquement Cron (contraction de chrono table) est un programme d’arrière-plan (ou deamon) développer pour les systèmes UNIX. Par la suite les descendants d’UNIX (BSD, Darwin, Linux…) en ont hérité.

Et WordPress dans tout ça ?

WordPress possède ça propre version de Cron appelé WP-Cron. Bien entendu il n’a de Cron que le nom. Comme beaucoup d’autres programmes UNIX, Cron est entré dans les moeurs. Dire d’aujourd’hui « faire un Cron » cela veut dire que l’on crée une planification.

Programmer une tâche unique

Sans le savoir, à chaque fois qu’une page ou un article est publié en différé (Publier tout de suite Modifier), l’utilisateur délègue la publication à WP-Cron.

Sous le capot, cela revient à faire appel à la fonction wp_schedule_single_event() avec comme paramètres la date/heure et une action du type hook. Il s’agit d’une fonction contenant le script que devra exécuter WP-Cron. Mais avant d’utiliser wp_schedule_single_event() WordPress préconise de vérifier si l’exécution du script n’a pas déjà été panifier à l’aide de la fonction wp_next_scheduled.Dans le cas contraire, la fonction retourne la date de la prochaine exécution.

// création de la tâche sous forme de fonction

add_action('action_hook', 'cron_script');

function cron_script {
	// le code source de la tâche figure ici
}

// vérification et planification de la tâche

if( !wp_next_scheduled('action_hook')){
	wp_schedule_single_event( time() + 3600, 'action_hook');
}

La fonction wp_schedule_single_event() à deux arguments obligatoires:

  • La date à laquelle le script sera exécuté. Pour cela il faut fournir un timestamp, comme dans l’exemple ci-dessous avec time() qui retourne l’heure courante, mesurée en secondes depuis le début de l’époque UNIX, (1er janvier 1970 00:00:00 GMT) plus 3600 secondes pour ajouter 1 heure.
  • Le nom du hook associé à la tâche action_hook.

Déprogrammer une tâche

WordPress stocke la date de la prochaine exécution d’une tâche planifiée dans la table wp_options. Pour la déprogrammer, il faut utiliser la fonction wp_clear_scheduled_hook() en précisant le hook associé à la tâche. Soit, action_hook.

<?php wp_clear_scheduled_hook('action_hook'); ?>

Leave a Reply