Articles · 7 septembre 2026
Lancer WP-Cron à la main, puis le rendre fiable une fois pour toutes
Un article programmé qui ne sort pas, une extension qui ne fait rien à minuit : WP-Cron ne tourne pas à l'heure, il tourne quand quelqu'un visite. L'URL à appeler, WP-CLI, les quatre causes de panne, et la ligne de vrai cron qui règle tout.
WP-Cron est le planificateur intégré à WordPress. Les publications programmées, les vérifications de mises à jour, la file d’envoi d’une newsletter, le nettoyage automatique de la base : tout ça attend dans une liste, et WP-Cron exécute ce qui est arrivé à échéance.
Le piège est dans sa façon de décider que « c’est l’heure ». WP-Cron n’a pas d’horloge. Il se réveille quand quelqu’un charge une page. Pas de visiteur, pas de cron.
Ce seul choix de conception explique la plupart des « mon article programmé n’est jamais sorti » et « l’extension devait faire ça cette nuit ».
Le lancer à la main, tout de suite
Le plus simple : ouvrir cette URL dans le navigateur. WordPress démarre, exécute tout ce qui est en retard, et renvoie une page vide.
https://votresite.fr/wp-cron.php?doing_wp_cron
Depuis un terminal, même chose avec curl :
curl -s https://votresite.fr/wp-cron.php?doing_wp_cron
Si WP-CLI est installé sur le serveur, vous avez mieux : vous voyez la file avant de la lancer.
wp cron event list # ce qui est programmé, et quand
wp cron event run --due-now # exécute tout ce qui est en retard
wp cron test # vérifie que WP-Cron peut démarrer
Pas de terminal ? L’extension gratuite WP Crontrol affiche la même liste dans Outils → Cron Events, avec un lien « Exécuter » sur chaque ligne. C’est le moyen le plus rapide de savoir si une tâche est bloquée ou si elle n’a tout simplement jamais été programmée.
Pourquoi les tâches s’arrêtent sans bruit
Quatre causes, dans l’ordre où on les rencontre :
- Le cache de pages. La grande cause, et presque personne n’y pense. Une extension de cache ou l’hébergeur sert une copie HTML enregistrée, donc WordPress ne démarre pas, donc WP-Cron n’a jamais sa chance. Un site très visité et bien caché peut rater ses échéances pendant des heures.
- Peu de trafic. Dix visites par jour, dix passages du cron par jour, à des moments aléatoires.
- L’hébergeur l’a désactivé. Beaucoup d’hébergeurs infogérés définissent
DISABLE_WP_CRONet le remplacent par un vrai cron de leur côté. C’est bien, à condition que ce cron soit réellement activé pour votre site. Vérifiez dans le panneau d’hébergement. - Un verrou qui traîne. WP-Cron pose un verrou pendant qu’il tourne. Si une tâche a planté en route, le verrou peut rester une minute, et chaque requête pendant cette minute saute la file.
wp cron event run --due-nowle nettoie.
Le rendre fiable : un vrai cron
La solution, c’est de détacher le planificateur des visiteurs. D’abord, dans wp-config.php, on empêche WordPress de lancer WP-Cron à chaque page :
define( 'DISABLE_WP_CRON', true );
Ensuite, on demande au serveur de l’appeler à heure fixe. Sur n’importe quel hébergement Linux avec accès au cron, crontab -e et une ligne, toutes les cinq minutes :
*/5 * * * * curl -s https://votresite.fr/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Ou, avec WP-CLI, la même chose sans passer par le serveur web :
*/5 * * * * cd /var/www/site && wp cron event run --due-now > /dev/null 2>&1
Cinq minutes est une bonne valeur par défaut. Une minute convient à un site qui envoie des e-mails urgents, quinze minutes suffisent à un blog. Les visiteurs ne sont plus ralentis par une tâche qui tombe pile à leur arrivée, et la file avance qu’il y ait quelqu’un ou non.
Avant de mettre ça en place, un coup d’œil au panneau de l’hébergeur : Kinsta, WP Engine, SiteGround, Cloudways et la plupart des infogérés font déjà tourner un cron côté serveur, ou ont un interrupteur pour ça. L’activer, c’est tout le travail.
Pas d’accès au serveur ? Un service externe
Sur un mutualisé sans cron, un service extérieur peut appeler l’URL pour vous. cron-job.org et EasyCron ont des offres gratuites qui couvrent une URL toutes les quelques minutes. Pointez-les sur https://votresite.fr/wp-cron.php?doing_wp_cron, gardez DISABLE_WP_CRON, c’est réglé.
Ce que veut dire « ?doing_wp_cron »
Vous verrez ce paramètre ajouté par WordPress lui-même et par des extensions. C’est un signal : « cette requête sert à lancer le cron ». WordPress traite alors la file au lieu d’afficher une page, et se sert de l’horodatage comme verrou. Il est inoffensif dans vos logs, et il doit rester sur toute URL que vous programmez.
Les extensions Meow Apps qui en dépendent
Tout ce qui travaille en arrière-plan. Le nettoyage automatique de Database Cleaner, la file d’envoi de Meow Mailer, les déclencheurs programmés de Meow Workflow. Si l’une d’elles « ne fait rien à l’heure prévue », tapez wp cron event list avant de toucher à ses réglages : neuf fois sur dix la tâche est là, elle attend, et c’est le planificateur qui ne s’est jamais réveillé 🙂
L'extension liée à cet article
Database Cleaner
Nettoyer les révisions, les transients périmés et les tables orphelines.