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

Headless & API

Un musée en ligne headless : synchroniser son catalogue avec Algolia

Passer d'une synchronisation Algolia par lot quotidien à un déclenchement à chaque publication a changé la perception de fraîcheur du catalogue d'un musée en ligne.

Par WordPress Développement • 2 mai 2022 • 4 min de lecture • Aucun commentaire
Un musée en ligne headless : synchroniser son catalogue avec Algolia

Avril 2022 : un musée en ligne ouvre un nouvel espace de collection permanente sur son site WordPress headless, avec près de 3 000 œuvres cataloguées et indexées dans Algolia pour la recherche. Le job de synchronisation, exécuté chaque nuit à heure fixe, publiait le lendemain matin toute œuvre ajoutée la veille — un délai jugé acceptable jusqu’à ce qu’une exposition temporaire, avec des ajouts de catalogue au fil de la journée d’ouverture, révèle la limite de cette approche.

Ce cas ne traite pas de la performance du front qui consomme l’index Algolia, mais uniquement de la mécanique de synchronisation entre WordPress et Algolia, et du passage d’un traitement par lot à un déclenchement événementiel.

Le problème du lot quotidien

Le job nocturne, une tâche planifiée exécutée via wp_schedule_event, parcourait l’intégralité des œuvres modifiées depuis la dernière exécution et les envoyait à Algolia en un seul lot. Cette approche fonctionnait bien tant que les publications suivaient un rythme prévisible — quelques ajouts par semaine — mais s’est révélée inadaptée le jour où l’équipe de médiation culturelle a commencé à publier de nouvelles fiches d’œuvres en cours de journée, pendant l’ouverture d’une exposition, avec l’attente légitime qu’elles apparaissent immédiatement dans la recherche du site.

Le déclenchement à la publication

Le correctif a consisté à remplacer le déclenchement temporel par un déclenchement sur l’action WordPress save_post, filtrée sur le type de contenu concerné, avec une synchronisation immédiate vers Algolia à chaque publication ou mise à jour d’une œuvre :

L'essentiel à retenir : Un lot quotidien laisse une œuvre invisible plusieurs heures ; Un déclenchement à la publication réduit ce délai à quelques secondes ; La désindexation doit suivre les mêmes règles que l'indexation
add_action('save_post_oeuvre', function ($post_id, $post, $update) {
    if (wp_is_post_revision($post_id) || $post->post_status !== 'publish') {
        return;
    }

    $index = algolia_get_index('oeuvres');
    $index->saveObject([
        'objectID'    => $post_id,
        'titre'       => get_the_title($post_id),
        'artiste'     => get_field('artiste', $post_id),
        'periode'     => get_field('periode', $post_id),
        'salle'       => get_field('salle_exposition', $post_id),
        'extrait'     => wp_trim_words(get_the_excerpt($post_id), 40),
    ]);
}, 10, 3);

add_action('before_delete_post', function ($post_id) {
    if (get_post_type($post_id) === 'oeuvre') {
        algolia_get_index('oeuvres')->deleteObject($post_id);
    }
});

Ce changement a réduit le délai entre publication et disponibilité en recherche de vingt-quatre heures, dans le pire des cas, à quelques secondes seulement — le temps de l’appel API vers Algolia lui-même.

Un filet de sécurité conservé

Le job nocturne n’a pas été supprimé pour autant : il continue de tourner une fois par jour, mais avec un rôle différent, celui de rattraper les écarts éventuels — un appel Algolia qui aurait échoué silencieusement, une modification effectuée directement en base sans passer par l’action save_post. Cette double couche, synchronisation immédiate et rattrapage quotidien, s’est révélée plus robuste que l’un ou l’autre mécanisme pris isolément.

La désindexation, un sujet à part entière

Le passage à un déclenchement événementiel a aussi mis en lumière un oubli initial : la dépublication d’une œuvre, par exemple lors du retrait temporaire d’une pièce prêtée à une autre institution, ne déclenchait aucune désindexation. Le hook save_post_oeuvre a donc été complété par une vérification du statut, retirant de l’index toute œuvre dont le statut passe à autre chose que publish.

Ce que ce cas retient

  • Un traitement par lot introduit toujours un délai, même court, entre la publication et sa visibilité effective.
  • Un déclenchement événementiel élimine ce délai, au prix d’une gestion plus fine des cas d’échec ponctuels.
  • Conserver un filet de sécurité périodique reste une bonne pratique, même une fois la synchronisation en temps quasi réel en place.

La fraîcheur perçue d’un catalogue ne se mesure pas à la rapidité du moteur de recherche, mais au délai entre le moment où un contenu existe réellement et le moment où il devient trouvable.

En résumé

Passer d’une synchronisation nocturne à un déclenchement à la publication n’a rien changé à la manière dont Algolia indexe ou classe les résultats : cela a seulement raccourci le délai avant qu’une nouvelle œuvre ne devienne visible en recherche, un détail qui compte particulièrement pour une institution culturelle dont le rythme de publication suit celui de ses expositions, pas celui d’un calendrier fixe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi