Gagner du temps dans la gestion de votre site WordPress, c’est possible grâce aux tâches Cron (wp-cron job). En automatisant certaines actions répétitives comme l’envoi d’emails, les sauvegardes, ou encore le nettoyage de la base de données, vous simplifiez la maintenance tout en améliorant les performances de votre site. Pourtant, le système WP-Cron reste souvent méconnu. Ce guide vous accompagne pas à pas pour créer et modifier vos propres tâches planifiées, sans prise de tête et avec des exemples concrets à la clé.
Bien comprendre le fonctionnement du système WP-Cron
WordPress intègre un système de planification appelé WP-Cron (voir notre article également sur le fichier wp-cron.php), qui permet d’exécuter automatiquement certaines actions à intervalles réguliers. Contrairement aux tâches Cron classiques basées sur le système Unix/Linux, WP-Cron ne fonctionne pas en arrière-plan sur le serveur de manière autonome. Il s’agit plutôt d’un système de simulation de planification, déclenché par les visites sur le site. Autrement dit, chaque fois qu’une page est chargée, WordPress vérifie s’il existe une tâche programmée arrivée à échéance. Si c’est le cas, elle est exécutée à ce moment-là, dans le même processus que le rendu de la page.
Ce mécanisme évite d’avoir à configurer une vraie tâche Cron côté serveur, ce qui le rend particulièrement utile sur les hébergements mutualisés ou les environnements où l’accès au système est limité. Aucun accès SSH, aucune compétence serveur n’est requise pour que les tâches s’exécutent. Cependant, cette approche a plusieurs limites techniques et peut entraîner des effets secondaires indésirables selon le contexte :
- Dépendance au trafic : Si personne ne visite le site, aucune tâche ne peut être exécutée. Cela peut poser problème pour les sites à faible audience ou nécessitant une exécution précise (par exemple, à heure fixe) ;
- Impact sur les performances : Sur des sites très fréquentés, chaque visite déclenche un appel à la fonction
wp-cron.php
, ce qui peut entraîner des ralentissements ou des pics d’utilisation des ressources serveur ; - Fréquences limitées par défaut : WordPress ne propose que trois intervalles :
hourly
(toutes les heures),twicedaily
(deux fois par jour) etdaily
(une fois par jour). Pour des besoins plus précis, comme une exécution toutes les 5 minutes ou une fois par semaine, il est nécessaire d’enregistrer des intervalles personnalisés via un filtre.
Il est également utile de savoir que chaque tâche Cron WordPress est associée à un hook, c’est-à-dire un identifiant unique relié à une fonction PHP. Cela permet de structurer proprement les automatisations, et d’ajouter ou supprimer des actions de manière ciblée. Pour mieux visualiser les événements en cours et comprendre ce qui s’exécute en coulisses, vous pouvez installer un plugin dédié tel que WP Crontrol. Ce plugin très complet vous permet :
- de voir la liste de toutes les tâches programmées (prochain déclenchement, fréquence, arguments) ;
- de modifier ou supprimer des événements existants sans écrire une ligne de code ;
- d’ajouter de nouveaux événements manuellement avec leurs paramètres ;
- de tester immédiatement une tâche pour vérifier son comportement.
Créer une tâche Cron personnalisée dans WordPress
Créer une tâche Cron personnalisée dans WordPress implique deux étapes :
- Déclarer l’événement planifié (et sa fréquence).
- Créer une fonction de rappel qui sera exécutée lorsque la tâche est déclenchée.
Voici un exemple simple : imaginons que vous souhaitiez envoyer un rapport automatique chaque semaine par email.
1. Ajouter un intervalle personnalisé (si nécessaire)
Par défaut, WordPress ne propose que trois fréquences pour les tâches Cron : Toutes les heures (hourly
), deux fois par jour (twicedaily
) et une fois par jour (daily
). Si vous avez besoin d’un intervalle différent — par exemple une tâche hebdomadaire, toutes les 5 minutes, ou même tous les trimestres — vous devrez d’abord définir cette fréquence personnalisée via le filtre cron_schedules
. Dans l’exemple ci-dessous, nous ajoutons un intervalle nommé hebdomadaire
équivalent à 604 800 secondes, soit 7 jours. Ce nouvel intervalle sera ensuite utilisable dans wp_schedule_event()
.
add_filter('cron_schedules', 'ajouter_intervalle_hebdomadaire');
function ajouter_intervalle_hebdomadaire($schedules) {
$schedules['hebdomadaire'] = array(
'interval' => 604800, // 7 jours en secondes
'display' => __('Une fois par semaine')
);
return $schedules;
}
Ce code est à insérer dans le fichier functions.php
de votre thème enfant ou, de préférence, dans un plugin spécifique si vous souhaitez le conserver indépendamment du thème. Une fois l’intervalle défini, vous pouvez l’utiliser pour planifier votre événement personnalisé.
2. Planifier la tâche
La planification d’une tâche consiste à dire à WordPress : “exécute cette action à un moment donné, selon un intervalle défini.” Cela se fait à l’aide de la fonction wp_schedule_event()
, qui nécessite trois paramètres :
- Le timestamp de départ : Généralement
time()
pour démarrer immédiatement. - L’intervalle : Ici, le nom de l’intervalle que vous avez ajouté (par exemple
hebdomadaire
). - Le hook : Une chaîne de caractères unique qui identifiera l’action à exécuter.
Avant de planifier une tâche, il est essentiel de vérifier qu’elle n’est pas déjà enregistrée, afin d’éviter des doublons qui pourraient entraîner des comportements inattendus (comme l’envoi multiple d’un même email). Pour cela, on utilise wp_next_scheduled()
.
if (!wp_next_scheduled('envoyer_rapport_hebdo')) {
wp_schedule_event(time(), 'hebdomadaire', 'envoyer_rapport_hebdo');
}
Ce code signifie : “si aucune tâche associée au hook envoyer_rapport_hebdo
n’est déjà programmée, alors programme-la dès maintenant pour qu’elle s’exécute chaque semaine.” Une fois cette étape réalisée, il ne reste plus qu’à associer une fonction à ce hook pour définir l’action à exécuter. Nous verrons cela dans l’étape suivante.
3. Créer la fonction à exécuter
Une fois la tâche planifiée, vous devez définir ce que WordPress doit faire lorsqu’elle est déclenchée. C’est là qu’intervient la fonction de rappel (ou callback), que vous allez associer au hook défini lors de la planification. Pour cela, vous utilisez add_action()
, en précisant le nom du hook et le nom de la fonction à exécuter.
Dans l’exemple ci-dessous, nous créons une fonction simple qui envoie un email hebdomadaire à l’administrateur du site :
add_action('envoyer_rapport_hebdo', 'fonction_envoi_rapport');
function fonction_envoi_rapport() {
// Exemple : envoyer un email
wp_mail('admin@example.com', 'Rapport hebdomadaire', 'Voici votre rapport hebdomadaire.');
}
Le hook envoyer_rapport_hebdo
est ici relié à la fonction fonction_envoi_rapport()
. Chaque fois que le Cron est déclenché (selon l’intervalle défini dans l’étape précédente), WordPress exécutera cette fonction. Le corps de cette dernière peut bien sûr être adapté selon vos besoins : export de données, nettoyage de la base, synchronisation d’API externe, génération de fichiers, etc.
Voici quelques points importants à respecter pour que la tâche s’exécute correctement :
- La fonction doit être définie avant le déclenchement de la tâche : si vous utilisez un plugin pour gérer vos Cron, assurez-vous que la fonction est déjà disponible lorsque le hook est déclenché.
- Les erreurs ne s’affichent pas : si votre fonction génère une erreur, elle passera probablement inaperçue. Il est donc recommandé d’implémenter une journalisation (via
error_log()
ou un outil commeMonolog
) pour détecter d’éventuels problèmes. - Testez votre fonction manuellement avant de la confier au système Cron, par exemple en l’appelant temporairement sur une page ou via un bouton d’action dans l’admin.
Ces quelques lignes de code, à insérer dans le fichier functions.php
de votre thème enfant ou, idéalement, dans un plugin personnalisé, suffisent à mettre en place une tâche hebdomadaire automatisée. Si vous travaillez sur un projet plus complexe, pensez à structurer votre code de manière modulaire pour faciliter la maintenance et le débogage.
Modifier ou supprimer une tâche Cron WordPress existante
Modifier une tâche Cron existante dans WordPress demande d’abord de l’identifier. Le plugin WP Crontrol est à nouveau très utile ici, car il vous permet de visualiser la liste complète des événements enregistrés.
Modifier une tâche via code
Il peut arriver que vous ayez besoin d’ajuster une tâche Cron WordPress déjà programmée : changer sa fréquence d’exécution, décaler son horaire, ou encore lui ajouter des paramètres. WordPress ne permet pas de modifier une tâche existante « en place ». Pour ce faire, vous devez d’abord la supprimer, puis la reprogrammer avec les nouveaux réglages souhaités.
Concrètement, cela se fait en deux étapes :
- Annuler la tâche actuelle à l’aide de
wp_clear_scheduled_hook()
, en précisant le nom du hook associé. - Créer une nouvelle planification avec
wp_schedule_event()
, en définissant la nouvelle fréquence ou les nouveaux paramètres.
wp_clear_scheduled_hook('envoyer_rapport_hebdo');
wp_schedule_event(time(), 'daily', 'envoyer_rapport_hebdo');
Dans cet exemple, la tâche envoyer_rapport_hebdo
, initialement programmée pour s’exécuter une fois par semaine, est annulée puis replanifiée pour s’exécuter chaque jour. Le paramètre 'daily'
correspond à l’un des intervalles prédéfinis par WordPress.
Voici quelques bonnes pratiques à garder à l’esprit lors de la modification d’un événement :
- Assurez-vous que l’événement existe avant d’essayer de le modifier, pour éviter des appels inutiles ;
- Utilisez des noms de hook explicites pour bien identifier vos tâches et faciliter leur maintenance ;
- Testez vos modifications en environnement de développement, surtout si la tâche a des effets sensibles (envoi d’emails, suppression de données, traitement d’API, etc.) ;
- Utilisez
wp_next_scheduled()
pour vérifier que la tâche est bien planifiée avec les bons paramètres après la modification.
Modifier une tâche Cron via le code reste une méthode fiable et précise, notamment dans des contextes où l’automatisation ou la mise à jour dynamique de tâches programmées est nécessaire (plugins personnalisés, thèmes avancés, intégrations externes, etc.).
Supprimer une tâche Cron
Si vous souhaitez désactiver une tâche Cron de façon définitive, il suffit de la retirer du système de planification de WordPress en utilisant la fonction wp_clear_scheduled_hook()
. Cela permet de supprimer toutes les occurrences futures associées à un hook donné, quelle que soit leur fréquence.
wp_clear_scheduled_hook('envoyer_rapport_hebdo');
Ce code supprime la tâche planifiée identifiée par le hook envoyer_rapport_hebdo
. C’est une opération simple mais efficace pour désactiver une automatisation devenue inutile ou obsolète.
Il est important de noter que cette suppression concerne uniquement la planification elle-même. La fonction PHP associée au hook n’est pas supprimée automatiquement. Si vous n’utilisez plus cette fonction ailleurs dans votre code, pensez à la retirer également pour alléger votre base de code et éviter des appels inutiles.
Pour plus de lisibilité et de maintenance, vous pouvez également documenter dans votre thème ou plugin les emplacements où cette tâche était utilisée, surtout si elle avait un rôle important dans votre logique métier.
Utilisation de WP Crontrol
Le plugin WP Crontrol est un outil très pratique pour gérer visuellement les tâches Cron dans WordPress, sans avoir besoin d’éditer du code. Il offre une interface simple et intuitive directement accessible depuis l’administration du site, sous le menu Outils > Cron Events. Voici ce que vous permet WP Crontrol :
- Visualiser l’ensemble des événements planifiés : Vous pouvez voir les noms des hooks, leur fréquence, le prochain déclenchement prévu, ainsi que les arguments éventuels passés à chaque tâche ;
- Exécuter une tâche à la demande : Pour tester rapidement une fonction ou valider son comportement sans attendre l’intervalle prévu ;
- Modifier une tâche existante : Vous pouvez ajuster la fréquence, le nom du hook, ou les paramètres associés directement depuis l’interface ;
- Supprimer une tâche programmée : Utile si une automatisation n’est plus pertinente ou doit être remplacée.
Ce plugin est particulièrement utile en phase de développement, de test ou de dépannage, mais il reste aussi pertinent en production pour surveiller le bon fonctionnement des tâches planifiées, en particulier dans les environnements où la fiabilité de WP-Cron est essentielle. Pour compléter votre maîtrise de WP-Cron, voici un tableau récapitulatif des fonctions PHP principales que vous pouvez utiliser en parallèle ou en complément de WP Crontrol :
Fonction | Description |
---|---|
wp_schedule_event() |
Planifie un événement à une fréquence donnée |
wp_clear_scheduled_hook() |
Supprime tous les événements liés à un hook |
wp_next_scheduled() |
Renvoie l’horodatage du prochain événement programmé pour un hook donné |
add_action() |
Associe une fonction personnalisée à un hook Cron |
remove_action() |
Dissocie une fonction d’un hook existant |
Grâce à WP Crontrol et à ces fonctions PHP, vous disposez de tous les outils nécessaires pour planifier, surveiller et gérer efficacement les tâches automatisées dans votre environnement WordPress.
0 commentaires