Vérifier les mises à jour disponibles, publier un article programmé à une heure donnée, ou purger les transitoires expirés : WordPress a besoin d’exécuter du code à intervalles réguliers, sans disposer nativement d’un accès à la crontab du système d’exploitation.
Fonctionnement dans WordPress
WP-Cron simule cette planification en vérifiant, à chaque chargement de page, si des tâches enregistrées ont dépassé leur heure d’exécution prévue — via une requête vers wp-cron.php déclenchée en arrière-plan. Ce mécanisme dépend donc du trafic réel du site : sur un site peu visité, une tâche planifiée peut être retardée bien au-delà de l’intervalle prévu. On peut le désactiver avec la constante DISABLE_WP_CRON et lui substituer une véritable tâche cron système appelant wp-cron.php à intervalle fixe.
Exemple
if ( ! wp_next_scheduled( 'mon_evenement_quotidien' ) ) {
wp_schedule_event( time(), 'daily', 'mon_evenement_quotidien' );
}
Pièges fréquents
Planifier un événement sans jamais vérifier wp_next_scheduled() au préalable duplique la tâche à chaque activation du plugin ; il faut aussi penser à la désinscrire avec wp_clear_scheduled_hook() lors de la désactivation.
Bon à savoir
Le tableau des événements planifiés reste consultable depuis l’administration grâce à des extensions dédiées, très utiles pour diagnostiquer une tâche qui ne s’exécute jamais ou, à l’inverse, qui tourne en boucle sans jamais être correctement désinscrite.
Les intervalles disponibles par défaut se limitent à hourly, twicedaily et daily ; un besoin plus fin, comme une exécution toutes les quinze minutes, exige de déclarer son propre intervalle via le filtre cron_schedules avant de programmer l’événement correspondant.