Le WordPress d'aujourd'hui, décodé pour les développeurs

Blocs Gutenberg

Cours du jour d’une matière première en bloc, pour une coopérative agricole

Une coopérative céréalière veut afficher automatiquement le cours du jour de ses matières premières, sans étape manuelle ni saisie répétée chaque matin.

Par Clément Hadrot • 23 avril 2025 • 5 min de lecture • Aucun commentaire
Cours du jour d'une matière première en bloc, pour une coopérative agricole

wp_schedule_event( strtotime( '06:30:00' ), 'daily', 'cooperative_maj_cours' ) : cette seule ligne, plantée dans un fichier d’initialisation de thème, réglait le problème que se posait une coopérative céréalière du Loiret — comment afficher chaque matin, sur la page publique de ses adhérents, le cours du jour du blé tendre et du colza, sans qu’une personne ne le saisisse manuellement à la main depuis un flux public.

La coopérative publiait jusque-là ce cours via un tableau Excel envoyé par e-mail chaque matin à ses adhérents, recopié à la main sur le site par la secrétaire. L’objectif du projet : automatiser entièrement cette recopie, sans jamais laisser un adhérent voir un cours obsolète ou un bloc vide en cas de défaillance du flux externe.

Étape 1 — Choisir le bon rythme de récupération

Le cours de ces matières premières ne varie qu’une fois par jour ouvré pour l’usage de la coopérative — inutile donc d’interroger le flux à chaque affichage de page, ce qui exposerait le site à la lenteur ou à l’indisponibilité du fournisseur de données à chaque visite. Une tâche planifiée WP-Cron, déclenchée chaque matin à 6h30, suffit largement :

add_action( 'init', function() {
    if ( ! wp_next_scheduled( 'cooperative_maj_cours' ) ) {
        wp_schedule_event( strtotime( '06:30:00' ), 'daily', 'cooperative_maj_cours' );
    }
} );

add_action( 'cooperative_maj_cours', function() {
    $reponse = wp_remote_get( 'https://flux-public.example/cours-matieres.json' );
    if ( is_wp_error( $reponse ) ) {
        return; // l'ancienne valeur en cache reste affichée
    }
    $donnees = json_decode( wp_remote_retrieve_body( $reponse ), true );
    set_transient( 'cooperative_cours_du_jour', $donnees, 26 * HOUR_IN_SECONDS );
} );

La durée de vie du transient, fixée à vingt-six heures plutôt que vingt-quatre, protège d’un léger décalage horaire du serveur cron : si la tâche du jour tarde à s’exécuter pour une raison quelconque, l’ancienne valeur reste affichée deux heures de plus plutôt que de disparaître brutalement.

Étape 2 — Le bloc de rendu, simple lecteur du cache

L'essentiel à retenir : Le cours est récupéré une fois par jour via une tâche planifiée WP-Cron ; Le bloc reste dynamique mais ne rappelle jamais le flux à chaque affichage ; Un affichage de secours évite un bloc vide en cas de panne du flux

Le bloc cooperative/cours-jour ne fait jamais lui-même d’appel réseau : il se contente de lire le transient mis à jour par la tâche planifiée, ce qui garantit un temps de rendu constant quel que soit l’état du flux externe :

function cooperative_render_cours_jour( $attributes ) {
    $cours = get_transient( 'cooperative_cours_du_jour' );

    if ( empty( $cours ) ) {
        return '<p class="cours-indisponible">Cours du jour momentanément indisponible, consultez votre conseiller.</p>';
    }

    $lignes = '';
    foreach ( $cours as $matiere => $valeur ) {
        $lignes .= sprintf(
            '<li>%s : %s €/tonne</li>',
            esc_html( $matiere ),
            esc_html( number_format_i18n( $valeur, 2 ) )
        );
    }

    return '<ul class="cours-jour">' . $lignes . '</ul>';
}

Ce découplage entre récupération (planifiée) et affichage (instantané, depuis le cache) est ce qui garantit qu’un pic de trafic sur le site de la coopérative — par exemple un jour d’assemblée générale — ne se traduit jamais par un afflux de requêtes vers le flux externe.

Étape 3 — Un affichage de secours qui rassure plutôt qu’inquiète

Le message affiché en cas d’échec du flux a fait l’objet d’une attention particulière : plutôt qu’un message d’erreur technique, il redirige l’adhérent vers son conseiller, une réponse cohérente avec l’usage réel du site — les adhérents de cette coopérative appellent de toute façon leur conseiller pour toute question de commercialisation, le site n’étant qu’un complément d’information rapide.

  • Le message de secours ne mentionne jamais le mot « erreur », qui inquiéterait inutilement un adhérent non technique.
  • Une alerte e-mail interne, distincte du message public, prévient l’équipe technique en cas d’échec de récupération deux jours de suite.
  • Le format des nombres suit la locale française, avec virgule décimale, via number_format_i18n() plutôt qu’un simple number_format().

Un cours affiché avec un léger retard reste préférable à un bloc vide : la confiance d’un adhérent se construit sur la régularité, pas sur l’instantanéité absolue.

Ce que cette architecture ne couvre pas

Aucun historique des cours n’est conservé par ce dispositif : seule la dernière valeur récupérée reste accessible, le transient précédent étant simplement écrasé chaque matin. Un adhérent souhaitant consulter l’évolution du cours sur plusieurs semaines devra se tourner vers d’autres outils de la coopérative, cette question dépassant le périmètre d’un simple bloc d’affichage quotidien.

En résumé

Afficher un cours de matière première mis à jour automatiquement tient à une séparation stricte entre récupération planifiée et lecture instantanée depuis le cache, avec un message de secours pensé pour l’utilisateur final plutôt que pour le développeur. Cette architecture, une fois en place, ne demande plus aucune intervention manuelle à la coopérative — l’objectif initial du projet.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi