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

Astuces

Décompter les places restantes à un événement professionnel avant la clôture

Un organisateur de salon professionnel limite ses inscriptions à une jauge fixe. Un compteur de places restantes, calculé sans système de billetterie complet, suffit à afficher une disponibilité fiable jusqu'à la clôture.

Par WordPress Développement • 23 janvier 2024 • 4 min de lecture • Aucun commentaire
Décompter les places restantes à un événement professionnel avant la clôture

200 places, pas une de plus : la jauge d’un salon professionnel est souvent fixée par la capacité physique du lieu, une contrainte incontournable qui ne tolère aucun dépassement une fois le seuil atteint. Contrairement à une billetterie payante avec gestion de catégories tarifaires et de listes d’attente, ce type d’événement a surtout besoin d’un compteur fiable et d’une clôture automatique des inscriptions.

Deux champs suffisent sur le type de contenu evenement_pro : jauge_totale, fixée une fois par l’organisateur, et nombre_inscrits, incrémenté à chaque inscription validée. Le nombre de places restantes se calcule par simple soustraction, sans jamais recompter l’ensemble des inscriptions à chaque affichage de la page.

Incrémenter le compteur à l’inscription

Lors de la validation d’une inscription, généralement traitée via un formulaire dédié à l’événement, le compteur est incrémenté avant même que l’email de confirmation ne soit envoyé au participant :

function wpm_incrementer_inscrits_evenement( $evenement_id ) {
    $inscrits_actuels = (int) get_post_meta( $evenement_id, 'nombre_inscrits', true );
    update_post_meta( $evenement_id, 'nombre_inscrits', $inscrits_actuels + 1 );
}

Calculer et afficher les places restantes

L'essentiel à retenir : La jauge totale et le nombre d'inscrits sont deux champs distincts ; Le compteur se recalcule à chaque inscription, sans requête de comptage lourde ; La clôture automatique bloque les inscriptions dès la jauge atteinte
function wpm_places_restantes( $evenement_id ) {
    $jauge    = (int) get_post_meta( $evenement_id, 'jauge_totale', true );
    $inscrits = (int) get_post_meta( $evenement_id, 'nombre_inscrits', true );

    return max( 0, $jauge - $inscrits );
}
$restantes = wpm_places_restantes( get_the_ID() );

if ( $restantes > 0 ) {
    echo '<p>' . esc_html( $restantes ) . ' places restantes</p>';
} else {
    echo '<p>Inscriptions closes, jauge atteinte</p>';
}

Vérifier la disponibilité avant d’accepter une nouvelle inscription

Le calcul ne sert pas qu’à l’affichage : il doit aussi bloquer une nouvelle inscription si la jauge est déjà atteinte, une vérification à effectuer côté serveur avant tout enregistrement, jamais uniquement côté formulaire visible :

function wpm_inscription_encore_possible( $evenement_id ) {
    return wpm_places_restantes( $evenement_id ) > 0;
}

if ( ! wpm_inscription_encore_possible( $evenement_id ) ) {
    wp_die( 'Les inscriptions à cet événement sont closes, la jauge est atteinte.' );
}

Gérer les désistements

Un participant qui annule son inscription doit rendre sa place disponible, ce qui suppose de décrémenter le compteur symétriquement à l’incrémentation initiale :

function wpm_decrementer_inscrits_evenement( $evenement_id ) {
    $inscrits_actuels = (int) get_post_meta( $evenement_id, 'nombre_inscrits', true );
    update_post_meta( $evenement_id, 'nombre_inscrits', max( 0, $inscrits_actuels - 1 ) );
}

Afficher une jauge visuelle plutôt qu’un simple chiffre

  • Une barre de progression calculée en pourcentage : round( ( $inscrits / $jauge ) * 100 ).
  • Un message d’urgence affiché sous quinze places restantes, pour inciter à finaliser l’inscription rapidement.
  • Un badge « complet » distinct du reste de la fiche, réutilisable sur d’autres événements de l’organisateur.

Éviter le risque de dépassement en cas d’inscriptions simultanées

Si deux visiteurs valident leur inscription au même instant alors qu’il ne reste qu’une place, une simple lecture puis écriture du compteur peut créer une situation de dépassement de jauge, un cas rare mais réel sur un événement très demandé. Une vérification atomique via une requête SQL directe, plutôt qu’une lecture-modification en deux temps, referme ce risque :

global $wpdb;

$wpdb->query( $wpdb->prepare(
    "UPDATE {$wpdb->postmeta} SET meta_value = meta_value + 1
     WHERE post_id = %d AND meta_key = 'nombre_inscrits'
     AND CAST( meta_value AS UNSIGNED ) < (
         SELECT CAST( meta_value AS UNSIGNED ) FROM {$wpdb->postmeta}
         WHERE post_id = %d AND meta_key = 'jauge_totale'
     )",
    $evenement_id,
    $evenement_id
) );

Conseil maison : pour un événement à forte affluence prévisible, testez toujours le scénario d’inscriptions simultanées avant le jour de l’ouverture. Un compteur qui fonctionne parfaitement en test unitaire peut se comporter différemment sous charge réelle.

En résumé

Un compteur de places restantes basé sur deux champs simples et une vérification atomique en cas de forte affluence répond à l’essentiel du besoin d’un organisateur de salon professionnel, sans nécessiter de billetterie complète ni de gestion de listes d’attente si ce n’est pas le besoin réel de l’événement.

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