Un site dont l'article programmé pour neuf heures du matin ne se publie qu'en fin de matinée, ou dont la sauvegarde nocturne semble parfois sauter une nuit sur deux, souffre généralement d'un malentendu répandu sur le fonctionnement de WordPress : le système censé exécuter ces tâches planifiées, appelé WP-Cron, n'est pas un véritable planificateur au sens où l'entend un serveur.
Ce que WP-Cron fait réellement
Un vrai cron, au sens système, est un mécanisme du serveur qui se déclenche à des horaires fixes, indépendamment de toute activité extérieure, exactement comme une horloge. WP-Cron, à l'inverse, ne se déclenche qu'au moment où un visiteur charge une page du site. À chaque chargement de page, WordPress vérifie si une tâche planifiée est arrivée à échéance, et si c'est le cas, l'exécute à ce moment précis plutôt qu'à l'heure prévue. Cette conception, choisie à l'origine pour fonctionner sur n'importe quel hébergement sans configuration serveur particulière, fonctionne raisonnablement bien tant que le site reçoit un flux de visites régulier.
Le problème sur un site à faible trafic
Un site vitrine ou un blog consulté par une poignée de visiteurs par jour peut rester plusieurs heures sans aucune visite, notamment la nuit. Si une tâche est programmée pour trois heures du matin et qu'aucun visiteur ne charge de page avant huit heures, cette tâche ne s'exécute tout simplement pas avant ce moment là. Un article prévu tôt le matin publie donc en retard, une sauvegarde nocturne se décale d'autant, et un envoi d'email planifié part bien plus tard que prévu, sans qu'aucune erreur ne soit visible dans l'administration du site.
Le problème inverse sur un site à fort trafic
Sur un site qui reçoit un trafic important, WP-Cron se déclenche à chaque chargement de page, ce qui peut représenter une vérification exécutée des dizaines ou des centaines de fois par minute. Cette vérification répétée consomme des ressources serveur de façon inutile, et peut contribuer à un ralentissement général difficile à diagnostiquer, puisque son effet se confond avec celui d'autres processus du site plutôt que d'apparaître comme une cause isolée.
La solution recommandée : un vrai cron système
La correction standard consiste à désactiver le comportement par défaut de WP-Cron en ajoutant la ligne define ouvre parenthèse guillemet DISABLE_WP_CRON guillemet virgule true ferme parenthèse point-virgule dans le fichier wp-config.php, puis à configurer un vrai cron au niveau du serveur, généralement accessible via le panneau d'administration de l'hébergement ou en ligne de commande. Ce cron système appelle le fichier wp-cron.php du site à intervalle régulier, souvent toutes les cinq minutes, garantissant une exécution fiable des tâches planifiées indépendamment du trafic réel du site. La plupart des hébergeurs orientés WordPress proposent cette configuration en quelques clics depuis leur interface de gestion.
Diagnostiquer une tâche planifiée qui ne s'exécute pas
Avant de modifier la configuration, il est utile de vérifier précisément quelles tâches sont programmées et à quel moment, ce que permet une extension comme WP Crontrol, qui affiche la liste complète des événements planifiés, autorise leur déclenchement manuel pour test, et aide à repérer une tâche bloquée ou en double, un problème fréquent lorsque plusieurs extensions programment des vérifications similaires sans coordination entre elles.
Le cas des tâches lourdes et répétitives
Pour des traitements plus complexes qu'une simple publication différée, comme la synchronisation régulière de données avec un CRM ou l'envoi automatisé de rappels à des clients, une bibliothèque comme Action Scheduler, intégrée nativement à WooCommerce mais utilisable indépendamment, gère une file d'attente persistante en base de données, avec un suivi précis de l'état de chaque tâche. Cette approche convient mieux qu'un simple hook WP-Cron pour un développement PHP sur mesure ou une automatisation métier ayant besoin d'une fiabilité accrue.
Points à vérifier avant publication : confirmer que la syntaxe recommandée pour désactiver WP-Cron dans wp-config.php reste inchangée pour les versions actuelles de WordPress, et vérifier que l'extension WP Crontrol citée reste activement maintenue et disponible sur le répertoire officiel à la date de publication.