# Club sportif amateur : un calendrier de matchs passé en headless

> Douze équipes, un calendrier remanié presque chaque semaine par un bénévole entre deux entraînements : comment un club amateur a exposé son calendrier via l'API REST pour un front léger.

- Auteur : WordPress Développement
- Publié le : 2021-01-20
- Mis à jour le : 2021-01-20
- Catégorie : Headless &amp; API
- URL : https://www.wpmoderne.fr/headless/club-sportif-amateur-calendrier-matchs-headless/

## L’essentiel

- Un type de contenu personnalisé suffit à modéliser un match
- Aucune extension tierce n'a été nécessaire pour exposer les données
- Le front consomme la route toutes les nuits, sans temps réel

Douze équipes, un calendrier remanié presque chaque semaine au gré des reports de match et des indisponibilités de terrain, saisi par un bénévole entre deux entraînements sur son téléphone : c'est le contexte dans lequel ce club sportif amateur a fait le choix d'exposer son calendrier via une API REST plutôt que de continuer à publier des tableaux dans des articles de blog impossibles à filtrer.

Le budget du projet était nul en dehors du temps bénévole déjà investi dans le club. Aucune extension payante, aucun service tiers d'hébergement supplémentaire : uniquement WordPress, un type de contenu personnalisé et un front statique généré une fois par nuit.

## Modéliser un match sans complexité inutile

Un type de contenu personnalisé `match` a suffi, avec des champs simples plutôt qu'une usine à gaz relationnelle entre équipes, terrains et compétitions distincts en tant que contenus séparés :

```
register_post_type( 'match', array(
    'label'        => 'Matchs',
    'public'       => true,
    'show_in_rest' => true,
    'supports'     => array( 'title', 'custom-fields' ),
) );
```

Les champs personnalisés — équipe adverse, date, lieu, résultat — ont été ajoutés via des champs personnalisés natifs plutôt qu'une extension de champs avancés, pour rester sur une base entièrement gratuite du début à la fin du projet.

## Exposer le calendrier sans écrire de route personnalisée

Avec `show_in_rest` activé, le type de contenu `match` est immédiatement disponible sur `/wp/v2/match`, sans qu'aucune route sur mesure n'ait été nécessaire pour ce besoin précis. Seul un filtre a été ajouté pour exposer les champs personnalisés dans la réponse :

```
add_action( 'rest_api_init', function() {
    register_rest_field( 'match', 'infos', array(
        'get_callback' => function( $post ) {
            return array(
                'adversaire' => get_post_meta( $post['id'], 'adversaire', true ),
                'date_match' => get_post_meta( $post['id'], 'date_match', true ),
                'lieu'       => get_post_meta( $post['id'], 'lieu', true ),
            );
        },
    ) );
} );
```

> L'essentiel à retenir : Un type de contenu personnalisé suffit à modéliser un match ; Aucune extension tierce n'a été nécessaire pour exposer les données ; Le front consomme la route toutes les nuits, sans temps réel

## Un front volontairement modeste

Le front, un site statique généré une fois par nuit via une action planifiée gratuite, affiche le calendrier de la semaine, filtré côté build plutôt que par une logique côté client complexe. Aucun rafraîchissement en temps réel n'était nécessaire : un match reporté le lundi soir apparaît correctement dès le lendemain matin sur le site.

- Génération statique nocturne, sans surveillance de webhook en continu
- Hébergement du front sur une offre gratuite adaptée aux petits volumes de trafic
- Aucune dépendance à un service de recherche ou de cache payant

## Ce que le bénévole a gagné au quotidien

Avant ce projet, chaque report de match imposait de retrouver l'ancien article de blog concerné, de le modifier, puis de vérifier que le tableau HTML qu'il contenait restait lisible sur mobile. Avec le type de contenu personnalisé, une simple modification du champ `date_match` depuis l'administration WordPress suffit, sans jamais toucher à une mise en forme HTML fragile.

Ce gain, difficile à chiffrer précisément, s'est traduit très concrètement par une baisse du nombre de messages échangés entre bénévoles pour signaler une erreur d'affichage, un problème auparavant récurrent avec l'ancien système de publication en articles de blog.

## Les limites assumées de cette approche

Un report de match annoncé en pleine journée n'apparaît sur le site qu'à la génération suivante, ce qui a été jugé acceptable par le club au regard du gain de simplicité et de coût. Un club avec des enjeux de billetterie ou de diffusion en direct n'aurait pas pu se satisfaire de cette latence.

> Un projet sans budget n'est pas un projet au rabais ; c'est un projet où chaque brique doit se justifier avant d'être ajoutée.

## En résumé

Un type de contenu personnalisé bien pensé, exposé nativement par l'API REST sans route sur mesure, a suffi à ce club amateur pour publier un calendrier fiable sur un front léger, sans dépenser le moindre euro. Ce cas ne traite pas la question de la billetterie, qui aurait imposé des contraintes de sécurité et de paiement totalement différentes.
