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

Thèmes

Annuaire d’agents généraux affiché en thème, filtré par département

Construire un annuaire filtrable par département pour les agents généraux d'un réseau d'assurance, directement dans un thème classique.

Par Clément Hadrot • 5 mai 2024 • 4 min de lecture • Aucun commentaire
Annuaire d'agents généraux affiché en thème, filtré par département

Un agent général peut-il vraiment être rattaché à deux départements à la fois ? Cette question, posée par un réseau d’assurance lors de la conception de son annuaire d’agents, a orienté tout le choix de structuration des données : certains agents généraux couvrent effectivement plusieurs départements limitrophes, ce qui excluait d’emblée un simple champ texte à valeur unique.

La réponse retenue s’appuie sur une taxonomie personnalisée plutôt qu’un champ de sélection classique, avec un filtre côté client qui évite tout rechargement de page lors du changement de département. Voici la construction complète de cet annuaire, pensé pour un thème classique.

Une taxonomie département, pas un champ texte

La taxonomie departement est déclarée sur le type de contenu agent_general, avec les quatre-vingt-seize départements de métropole préenregistrés comme termes lors de l’activation du thème, via une boucle sur un tableau statique associant code et nom de département.

register_taxonomy( 'departement', 'agent_general', array(
    'label'        => 'Départements',
    'hierarchical' => false,
    'public'       => true,
    'show_in_rest' => true,
) );

add_action( 'after_switch_theme', function () {
    foreach ( liste_departements_france() as $code => $nom ) {
        if ( ! term_exists( $nom, 'departement' ) ) {
            wp_insert_term( $nom, 'departement', array( 'slug' => $code ) );
        }
    }
} );

Un agent couvrant plusieurs départements se voit simplement attribuer plusieurs termes de cette taxonomie, sans aucune contrainte technique supplémentaire à gérer côté thème.

L'essentiel à retenir : Taxonomie personnalisée département plutôt qu'un champ texte libre ; Filtre en JavaScript natif sans rechargement de page ; Requête REST limitée aux champs strictement nécessaires

Le filtre côté client, sans rechargement de page

Plutôt que de recharger la page à chaque changement de département sélectionné, le filtre s’appuie sur l’API REST de WordPress, interrogée en JavaScript natif au moment où le visiteur choisit un département dans une liste déroulante.

const selecteur = document.querySelector('#filtre-departement');

selecteur.addEventListener('change', async (evenement) => {
    const terme = evenement.target.value;
    const reponse = await fetch(`/wp-json/wp/v2/agent_general?departement=${terme}&_fields=id,title,link,acf`);
    const agents = await reponse.json();

    afficherAgents(agents);
});

Le paramètre _fields restreint la réponse aux seules propriétés utilisées par l’affichage, évitant de transférer l’intégralité du contenu de chaque fiche agent à chaque filtrage — un détail qui allège sensiblement le poids des réponses sur un annuaire qui compte plusieurs centaines d’entrées.

Rendre la taxonomie interrogeable depuis l’API REST

Par défaut, une taxonomie personnalisée n’expose pas automatiquement de paramètre de requête REST portant son nom : il faut le déclarer explicitement lors de l’enregistrement, via l’argument rest_base combiné à une vérification que show_in_rest est bien actif, faute de quoi le paramètre departement utilisé plus haut serait silencieusement ignoré par l’API.

Le rendu initial, sans JavaScript, pour le premier chargement

Pour ne pas dépendre entièrement du JavaScript à l’affichage initial (accessibilité, référencement, dégradation gracieuse), la page d’archive du type de contenu agent_general affiche déjà, côté serveur, l’ensemble des agents via une boucle WP_Query classique. Le filtre JavaScript ne fait ensuite que remplacer ce contenu initial une fois qu’un département est sélectionné.

  • Premier affichage entièrement côté serveur, avec tous les agents visibles sans JavaScript.
  • Filtrage ultérieur entièrement côté client, sans rechargement complet de la page.
  • Une URL avec paramètre ?departement= reste également gérée côté serveur, pour permettre le partage d’un lien filtré.

Gérer la carte des départements limitrophes

Un agent rattaché au 92 doit souvent apparaître également pour un visiteur qui recherche le 75, en raison de la proximité géographique. Plutôt que de complexifier la logique de filtrage, ce cas est traité simplement en attribuant directement le second département comme terme supplémentaire lors de la saisie de la fiche agent, décision confirmée par le réseau après une phase de test.

Une taxonomie reste toujours préférable à un champ texte libre dès qu’une même fiche peut légitimement appartenir à plusieurs catégories : le filtrage, l’affichage et l’exposition via l’API REST en deviennent naturellement plus simples.

En résumé

Cet annuaire repose sur une architecture volontairement simple : une taxonomie fidèle à la réalité du métier plutôt qu’un champ contraint, un rendu initial accessible sans JavaScript, et un filtrage ensuite délégué à l’API REST native de WordPress. Aucune extension de recherche ni de filtrage n’a été nécessaire pour couvrir ce besoin.

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