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

Thèmes

Calendrier de tournois en thème classique, pour une fédération sportive

Afficher les rencontres à venir d'une fédération sportive avec une boucle WP_Query classique et des champs personnalisés, sans plugin d'événements.

Par WordPress Développement • 5 septembre 2022 • 4 min de lecture • Aucun commentaire
Calendrier de tournois en thème classique, pour une fédération sportive

Une fédération régionale de sport collectif m’a confié la refonte de son site avec une demande précise : afficher un calendrier de rencontres à venir, trié par date, sans dépendre d’un plugin d’événements qu’elle jugeait trop lourd pour ses besoins. Le cahier des charges tenait en une phrase, mais sa mise en œuvre propre demandait de bien choisir la structure de données dès le départ.

Voici comment j’ai construit ce calendrier directement dans le thème classique, avec un type de contenu personnalisé « rencontre » et une boucle WP_Query qui reste lisible même après plusieurs saisons de compétition.

Déclarer le type de contenu et ses champs

Le type de contenu rencontre est déclaré via register_post_type dans functions.php, avec le support minimal nécessaire (titre, éditeur pour un résumé éventuel). Les données propres au match — date, équipe adverse, lieu, compétition — sont stockées en champs personnalisés natifs plutôt que via une bibliothèque de champs avancés, pour garder le thème autonome.

register_post_type( 'rencontre', array(
    'label'        => 'Rencontres',
    'public'       => true,
    'supports'     => array( 'title', 'editor' ),
    'has_archive'  => true,
    'menu_icon'    => 'dashicons-groups',
) );

Chaque rencontre reçoit trois métadonnées : date_match (au format Y-m-d H:i), equipe_adverse et competition. Elles sont enregistrées via une boîte méta classique avec add_meta_box et update_post_meta, ce qui évite d’imposer à la fédération l’apprentissage d’une interface de champs personnalisés supplémentaire.

L'essentiel à retenir : Un type de contenu rencontre avec champs personnalisés ; Boucle triée par date de match à venir ; Regroupement par compétition sans requête supplémentaire

La boucle qui ne remonte que les rencontres à venir

Le piège classique consiste à trier uniquement par date de publication, alors qu’il faut trier par la métadonnée date_match. La requête utilise meta_key et orderby à meta_value, combinés à une comparaison sur la date du jour pour exclure les rencontres passées.

$aujourdhui = current_time( 'Y-m-d H:i' );

$rencontres = new WP_Query( array(
    'post_type'      => 'rencontre',
    'posts_per_page' => 20,
    'meta_key'       => 'date_match',
    'orderby'        => 'meta_value',
    'order'          => 'ASC',
    'meta_query'     => array(
        array(
            'key'     => 'date_match',
            'value'   => $aujourdhui,
            'compare' => '>=',
            'type'    => 'DATETIME',
        ),
    ),
) );

Ce filtre transforme un simple listing chronologique en calendrier vivant : dès qu’une rencontre est passée, elle disparaît automatiquement de l’affichage sans intervention manuelle de l’administrateur de la fédération.

Regrouper par compétition sans requête supplémentaire

La fédération gère plusieurs compétitions en parallèle (championnat régional, coupe, matchs amicaux). Plutôt que de lancer une requête par compétition, je récupère l’ensemble des rencontres à venir en une seule fois, puis je les regroupe côté PHP dans un tableau associatif indexé par la valeur de competition.

  • Une seule requête WP_Query pour toute la page, quel que soit le nombre de compétitions actives.
  • Un tableau PHP construit avec get_post_meta( get_the_ID(), 'competition', true ) comme clé de regroupement.
  • Un affichage par section <h3> pour chaque compétition, généré dynamiquement à partir des clés du tableau.

Le template et la boucle secondaire des résultats passés

À la demande de la fédération, une page « résultats » reprend la même structure mais inverse la logique : compare devient < et order devient DESC, pour afficher les dernières rencontres jouées en premier. Le même gabarit de boucle est réutilisé, avec un simple argument passé à une fonction de template partagée entre les deux pages.

Sur ce genre de projet associatif, je préfère toujours proposer une solution basée sur des types de contenu natifs plutôt qu’un plugin d’événements généraliste : la fédération garde un contrôle total sur la structure de ses données, sans dépendre d’une mise à jour tierce pour continuer à fonctionner.

Pour aller plus loin

Ce calendrier reste volontairement simple : pas de gestion de billetterie, pas de synchronisation avec un calendrier externe, seulement l’affichage fiable des prochaines rencontres à partir de données que la fédération maîtrise entièrement. Pour une fédération avec plusieurs équipes ou plusieurs sites, la même architecture se prête bien à une extension via une taxonomie personnalisée equipe, sans remettre en cause la boucle principale.

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