Dans les coulisses de chaque site WordPress se trouve un employé de l’ombre, un planificateur infatigable qui s’assure que les tâches programmées s’exécutent à temps : c’est le WP-Cron. C’est lui qui publie vos articles planifiés, qui vérifie les mises à jour des thèmes et des plugins, ou qui envoie les notifications par e-mail. Cependant, et c’est un point crucial, le WP-Cron n’est pas un vrai "cron job" au sens technique du terme. En effet, il possède une faiblesse fondamentale : il ne se déclenche que lorsque quelqu’un visite votre site. Cette particularité peut entraîner des problèmes de fiabilité sur les sites à faible trafic et des problèmes de performance sur les sites à fort trafic. Par conséquent, comprendre comment WP-Cron fonctionne, comment le gérer et, surtout, comment le remplacer par un vrai cron serveur est une compétence d’optimisation avancée qui peut transformer la stabilité et la vitesse de votre site.
Qu’est-ce que WP-Cron et comment fonctionne-t-il ?
Un vrai cron job est une tâche planifiée qui s’exécute à des intervalles de temps précis, directement sur le serveur. WP-Cron est un "pseudo-cron". Voici son fonctionnement :
- Chaque fois qu’une page de votre site est chargée, WordPress regarde dans sa liste de tâches planifiées (les "crons").
- Il vérifie si l’heure d’exécution d’une tâche est dépassée.
- Si c’est le cas, il exécute la tâche en question.
Cela pose deux problèmes majeurs :
- Fiabilité pour les sites à faible trafic : Si personne ne visite votre site à 14h, l’article que vous aviez programmé pour 14h ne sera pas publié. Il ne le sera qu’à la prochaine visite, que ce soit à 14h30 ou le lendemain.
- Performance pour les sites à fort trafic : Si votre site reçoit des centaines de visites par minute, WordPress vérifiera sa liste de tâches à chaque chargement de page. C’est une surcharge de travail inutile et répétitive qui peut ralentir le serveur.
Comment voir et gérer les tâches cron existantes
La façon la plus simple de jeter un œil sous le capot de WP-Cron est d’utiliser un plugin. Le plus connu et le plus efficace est WP Crontrol.
- Installez et activez le plugin WP Crontrol.
- Dans votre tableau de bord, allez dans Outils > Cron Events.
- Vous verrez une liste complète de toutes les tâches planifiées sur votre site, le nom de leur "hook", leur prochaine exécution et leur fréquence.
Ce plugin est un excellent outil de débogage. Il vous permet de voir ce qui se passe, d’exécuter manuellement une tâche ("Run Now"), de la modifier ou de la supprimer.
Comment créer une tâche cron WordPress personnalisée
Parfois, vous devez créer votre propre tâche planifiée. Imaginez que vous vouliez supprimer les fichiers temporaires de votre site une fois par jour. Le processus se fait en trois étapes, à ajouter dans le fichier functions.php de votre thème enfant ou dans un plugin personnalisé.
Étape 1 : Créer la fonction qui effectue l’action
function ma_fonction_de_nettoyage() {
// Votre code ici. Par exemple, supprimer des fichiers ou des données.
// Pour cet exemple, nous allons simplement écrire dans un fichier log.
error_log("La tâche de nettoyage personnalisée a été exécutée !");
}
Étape 2 : Créer un "hook" personnalisé et y attacher la fonction
Un hook est un point d’ancrage. C’est une bonne pratique pour découpler votre code.
add_action( 'mon_hook_de_nettoyage_quotidien', 'ma_fonction_de_nettoyage' );
Étape 3 : Planifier l’événement (s’il n’est pas déjà planifié)
C’est ici que la magie opère. Nous allons dire à WordPress de déclencher notre hook à une certaine fréquence.
if ( ! wp_next_scheduled( 'mon_hook_de_nettoyage_quotidien' ) ) {
wp_schedule_event( time(), 'daily', 'mon_hook_de_nettoyage_quotidien' );
}
Décortiquons cette étape cruciale :
if ( ! wp_next_scheduled( ... ) ): Cette ligne est essentielle. Elle vérifie si notre tâche est déjà planifiée. Sans cette vérification, WordPress ajouterait une nouvelle planification à chaque chargement de page, créant des centaines de tâches dupliquées.wp_schedule_event( time(), 'daily', ... ): Cette fonction planifie l’événement.time()signifie "maintenant",'daily'est la fréquence (autres options :'hourly','twicedaily'), et'mon_hook_de_nettoyage_quotidien'est le hook que nous voulons déclencher.
L’Optimisation Ultime : Remplacer WP-Cron par un Vrai Cron Serveur
Pour une fiabilité et une performance maximales, la meilleure solution est de désactiver WP-Cron et de le remplacer par un vrai cron job au niveau du serveur.
Étape 1 : Désactiver WP-Cron
Ouvrez votre fichier wp-config.php (situé à la racine de votre site) et ajoutez la ligne suivante juste avant /* C'est tout, ne touchez pas à ce qui suit ! */ :
define('DISABLE_WP_CRON', true);
Cela empêchera WordPress de lancer son système de cron à chaque visite.
Étape 2 : Créer un vrai cron job sur votre serveur
Dans le panneau de contrôle de votre hébergeur (comme cPanel, fourni par Tswan Hosting), cherchez une option appelée "Cron Jobs" ou "Tâches Cron".
Vous devrez créer une nouvelle tâche qui exécute la commande suivante à un intervalle régulier (par exemple, toutes les 15 minutes) :
wget -q -O - https://www.votresite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Remplacez https://www.votresite.com par l’URL de votre site.
Que fait cette commande ?
- Elle "appelle" le fichier
wp-cron.phpà une URL spécifique. - Lorsque ce fichier est appelé, il exécute toutes les tâches WordPress dont l’heure est dépassée, comme le ferait une visite normale.
- Les options
>/dev/null 2>&1empêchent la commande de générer des fichiers de log ou des e-mails inutiles.
Avec cette configuration, vous avez le meilleur des deux mondes : la facilité de gestion des tâches planifiées de WordPress, et la fiabilité et la performance d’un vrai cron serveur. C’est une optimisation standard pour tout site WordPress sérieux, une pratique mise en œuvre par les experts de Tswan Softwares pour garantir des performances optimales.

