Une coopérative agricole loue une trentaine de machines à ses adhérents — tracteurs, épandeurs, presses à balles — et voulait afficher sur son site un statut simple pour chacune : disponible, réservée, ou en maintenance. La donnée source existait déjà dans un tableur partagé utilisé par les techniciens sur le terrain, mais rien ne la reliait automatiquement au site public.
Plutôt que de recalculer ce statut à chaque affichage de page (ce qui aurait imposé une lecture répétée du tableur ou de sa source), le choix s’est porté sur une tâche planifiée qui synchronise les statuts toutes les heures, avec un résultat stocké en métadonnée et simplement lu au moment de l’affichage.
L’arborescence retenue pour ce dispositif
theme-cooperative/
├── functions.php
├── inc/
│ ├── class-synchronisation-materiel.php
│ └── class-cpt-materiel.php
├── template-parts/
│ └── fiche-materiel.php
└── single-materiel.php
Le type de contenu materiel porte une métadonnée statut_disponibilite, avec trois valeurs possibles : disponible, reserve et maintenance. Cette métadonnée n’est jamais modifiée directement par un utilisateur dans l’administration : elle est entièrement pilotée par la tâche planifiée.

Déclarer la tâche planifiée avec wp_schedule_event
La tâche est enregistrée à l’activation du thème, avec une fréquence horaire personnalisée ajoutée au tableau des intervalles disponibles, WordPress ne proposant nativement que les fréquences horaire, deux fois par jour et quotidienne par défaut — l’intervalle horaire suffisait donc ici sans ajout personnalisé.
add_action( 'after_switch_theme', function () {
if ( ! wp_next_scheduled( 'synchroniser_disponibilite_materiel' ) ) {
wp_schedule_event( time(), 'hourly', 'synchroniser_disponibilite_materiel' );
}
} );
add_action( 'synchroniser_disponibilite_materiel', 'executer_synchronisation_materiel' );
function executer_synchronisation_materiel() {
$donnees_source = recuperer_donnees_tableur_partage();
foreach ( $donnees_source as $identifiant => $statut ) {
$article_id = recuperer_article_materiel_par_identifiant( $identifiant );
if ( $article_id ) {
update_post_meta( $article_id, 'statut_disponibilite', sanitize_key( $statut ) );
}
}
}
Ne jamais recalculer le statut au moment de l’affichage
Le template de fiche matériel se contente de lire la métadonnée déjà synchronisée, sans jamais appeler la source de données externe directement. Cette séparation garantit un temps de réponse constant pour le visiteur, indépendant de la disponibilité ou de la lenteur éventuelle de la source de données du tableur partagé.
$statut = get_post_meta( get_the_ID(), 'statut_disponibilite', true );
$libelles = array(
'disponible' => 'Disponible',
'reserve' => 'Réservée',
'maintenance' => 'En maintenance',
);
echo esc_html( $libelles[ $statut ] ?? 'Statut inconnu' );
Vérifier la tâche avant la mise en production
Attendre une heure complète pour vérifier qu’une tâche planifiée fonctionne correctement n’est pas réaliste en phase de test. La commande WP-CLI wp cron event run permet de déclencher la tâche immédiatement, sans attendre son horaire théorique.
wp cron event run synchroniser_disponibilite_materiel
wp cron event list --fields=hook,next_run_relative | grep materiel
La limite connue de wp-cron sur ce projet
Le mécanisme de tâches planifiées de WordPress ne se déclenche qu’à l’occasion d’une visite sur le site, ce qui pouvait retarder la synchronisation sur les périodes de très faible trafic nocturne. Pour ce site à trafic modeste mais régulier en journée, ce délai occasionnel restait acceptable ; sur un projet à trafic plus irrégulier, j’aurais recommandé de désactiver le déclenchement par visite au profit d’une tâche cron système classique appelant wp-cron.php à intervalle fixe.
- Déclenchement par défaut lié au trafic du site, avec un risque de retard sur les périodes creuses.
- Alternative recommandée pour un trafic irrégulier : désactivation via la constante
DISABLE_WP_CRONet appel externe planifié. - Choix conservé ici : déclenchement par défaut, jugé suffisant au regard du trafic observé sur ce site.
Une donnée qui change rarement mais dont l’affichage doit rester rapide se prête toujours mieux à une synchronisation planifiée qu’à un recalcul en temps réel : le visiteur ne perd jamais de temps à attendre une source externe potentiellement lente ou indisponible.
En résumé
Ce dispositif de synchronisation horaire, entièrement porté par le mécanisme de tâches planifiées natif de WordPress, a permis à la coopérative d’afficher un statut de disponibilité fiable sans exposer directement son tableur de gestion interne au site public, et sans imposer de temps de chargement supplémentaire à ses visiteurs à chaque consultation d’une fiche matériel.