Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

wp_get_scheduled_event : lire les détails d’une tâche cron déjà programmée

Avant de programmer une nouvelle tâche planifiée à chaque activation d'extension, encore faut-il savoir si elle existe déjà. Une fonction native répond exactement à cette question.

Par WordPress Développement • 23 mars 2020 • 4 min de lecture • Aucun commentaire
wp_get_scheduled_event : lire les détails d'une tâche cron déjà programmée

Une extension qui programme une tâche récurrente à son activation, sans vérifier au préalable si cette tâche existe déjà, finit tôt ou tard par empiler des doublons : chaque réactivation ajoute une nouvelle occurrence du même événement dans la table cron. Le symptôme est classique — un traitement censé s’exécuter une fois par heure se déclenche soudain trois ou quatre fois d’affilée.

La fonction wp_get_scheduled_event() permet de récupérer les informations complètes d’une tâche déjà programmée : son horaire, son intervalle de récurrence et les arguments avec lesquels elle a été enregistrée. Elle offre une vision plus fine que le simple test booléen habituel.

La différence avec wp_next_scheduled

wp_next_scheduled() répond à une question binaire : cet événement, identifié par son nom de hook et ses arguments, est-il déjà dans la file d’attente ? Elle retourne l’horodatage de la prochaine exécution, ou false. C’est suffisant pour éviter un doublon lors de l’activation d’une extension.

wp_get_scheduled_event() va plus loin : elle retourne un objet contenant le hook, l’horodatage, la périodicité (schedule), l’intervalle en secondes et les arguments enregistrés. Utile lorsqu’un écran de diagnostic doit afficher, par exemple, la fréquence exacte à laquelle une tâche a été programmée, sans se contenter de savoir qu’elle existe.

Un exemple d’activation propre

L'essentiel à retenir : Renvoie un objet complet (hook, planification, args) ou false ; Évite d'empiler plusieurs occurrences du même événement ; Se combine avec wp_next_scheduled pour un test rapide
register_activation_hook( __FILE__, 'mon_extension_activation' );

function mon_extension_activation() {
    $evenement = wp_get_scheduled_event( 'mon_extension_purge_cache' );

    if ( ! $evenement ) {
        wp_schedule_event( time(), 'hourly', 'mon_extension_purge_cache' );
    }
}

Ce test évite d’appeler wp_schedule_event() à chaque activation ou réactivation de l’extension, un scénario fréquent lors des mises à jour ou des changements de configuration multisite.

Lire la périodicité programmée

L’objet retourné permet aussi de vérifier qu’une tâche tourne bien à l’intervalle attendu, sans dépendre d’une variable stockée séparément en base :

$evenement = wp_get_scheduled_event( 'mon_extension_purge_cache' );

if ( $evenement && 'hourly' !== $evenement->schedule ) {
    // La périodicité a changé depuis la dernière activation :
    // on reprogramme proprement.
    wp_clear_scheduled_hook( 'mon_extension_purge_cache' );
    wp_schedule_event( time(), 'hourly', 'mon_extension_purge_cache' );
}

Événements avec arguments

Si une tâche a été programmée avec des arguments (par exemple un identifiant de site sur un réseau multisite), il faut les transmettre également à wp_get_scheduled_event() pour retrouver le bon événement, car WordPress considère chaque combinaison hook et arguments comme un événement distinct.

  • Sans argument précisé, la fonction retourne le premier événement trouvé pour ce hook.
  • Avec un tableau d’arguments, elle cherche l’événement exact correspondant à cette combinaison.
  • Le champ interval de l’objet retourné n’existe que pour les événements récurrents, absent pour un événement ponctuel programmé via wp_schedule_single_event().

Où consulter ces informations en pratique

Un écran d’administration interne, réservé aux développeurs, peut afficher ces objets directement pour du diagnostic rapide, plutôt que d’installer une extension tierce dédiée uniquement à l’inspection du cron. Un simple var_export() de l’objet retourné suffit souvent à comprendre pourquoi une tâche ne se déclenche pas au bon moment.

Avant d’écrire une seule ligne de wp_schedule_event() dans un hook d’activation, vérifiez toujours ce que wp_get_scheduled_event() retourne. C’est la seule façon fiable de savoir si une tâche existe déjà, quelle que soit son origine.

En résumé

Empiler des tâches planifiées identiques est une erreur discrète, difficile à repérer sans lire attentivement la table cron. wp_get_scheduled_event() donne accès à toute l’information nécessaire pour éviter ce piège dès l’activation d’une extension, tout en offrant une base solide pour du diagnostic plus poussé sur des tâches déjà en production.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi