Comment tester une tâche cron correctement sur WordPress ?

ParJohan Maïa

Comment tester une tâche cron correctement sur WordPress ?

Comme je ne développe pas des tâches cron pour chaque plugin WordPress de mes clients, je peux passer parfois plusieurs heures à chercher pourquoi la tâche cron ne marche pas par oubli. Pour au final, comprendre que c´est la façon de tester qui n´est pas la bonne.

J´écris donc ce petit billet comme mémo pour tous ceux qui sont dans mon cas.

Vérifier que la tâche cron est bien enregistrée

Pour cela j´utilise le plugin WP Control qui permet de voir toutes les tâches cron programées.

Vous trouverez la liste de ces tâches cron dans Outils > Événements Cron.

Si la vôtre n´est pas visible, il faut vérifier si le code passe par là par exemple via un wp_die() juste avant comme ça :

if ( ! wp_next_scheduled( 'h4a_cron_hook' ) ) {
    wp_die( 'tu y vas un jour ?');
    wp_schedule_event( time(), 'hourly', 'h4a_cron_hook' );
}

Une autre possibilité pour que la tâche cron ne soit pas visible est le fait que le deuxième paramètre string $recurrence pour la fréquence ne soit pas compatible. Voici donc la liste des possibilités de valeurs:

  • ‘hourly’
  • ‘daily’
  • ‘twicedaily’

Il est possible d´ajouter d´autres valeurs grâce au filtre cron_shedules .

Vérifier le résultat de la tâche

Là où c´est souvent confus est lors de la vérification du résultat. Déjà, le plugin WP Control vous permettra d´exécuter votre tâche cron sans attendre une heure ou un jour ou sans changer la valeur $recurrence à chaque fois.

Mais exécuter ou lancer la tâche ne veut pas dire que votre fonction se lancera. Pour éviter les erreurs il faut bien comprendre le mécanisme de la tâche cron.

Déjà cette tâche n´aboutira pas forcément chaque heure ou quotidiennement ou autres. Elle se lancera sous certaines conditions.

Le script PHP ne peut que se lancer seulement si quelqu´un ou une machine lance le chargement d´une page. Si il y a pas de chargement de page, la tâche cron ne peut aboutir.

De plus, cette tâche cron à l´heure prévue vient se mettre dans une pile pour attendre la prochaine fois que quelqu´un veut bien lancer une page. Sauf que sa place en tête de pile dure un temps limité (peut-être une minute, je dois encore pousser le sujet ). Donc, si personne vient charger une page du site Web où la fonction d´appel est censée se déclencher, il n´y aura aucun résultat et faudra attendre la prochaine fois.

Donc, une fois compris cela, pour tester si sa fonction d´appel de la tâche cron fonctionne, il faut avec WP Control :

  1. Dans la liste des tâches Cron, cliquer sur « Éxecuter maintenant » en dessous du nom de votre tâche.
  2. PUIS rapidement après, charger une page où votre fonction d´appel fait effet.

Et là on est bon pour les tests !

À propos de l’auteur

Johan Maïa administrator

Laisser un commentaire