# Cacher le tarif d’un spectacle tant que la billetterie n’est pas ouverte

> Une salle de spectacle communique parfois sur un événement avant même l'ouverture des ventes. Voici comment masquer automatiquement le tarif jusqu'à une date d'ouverture définie, sans intégrer le système de billetterie.

- Auteur : WordPress Développement
- Publié le : 2022-03-15
- Mis à jour le : 2022-03-15
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/cacher-tarif-spectacle-avant-ouverture-billetterie/

## L’essentiel

- L'affichage du tarif dépend uniquement d'une comparaison de dates
- Aucune modification du système de billetterie n'est nécessaire
- Le masquage fonctionne même si l'article est publié bien avant l'ouverture des ventes

```
if ( current_time( 'timestamp' ) < strtotime( $date_ouverture_ventes ) ) {
    // le tarif reste masqué
}
```

Cette simple comparaison de dates résume l'essentiel d'un besoin fréquent en salle de spectacle vivant : communiquer sur un événement — affiche, distribution, date — plusieurs semaines avant que les prix ne soient officiellement dévoilés et que la billetterie n'ouvre. L'annonce anticipée fait partie de la stratégie de communication, mais le tarif doit rester confidentiel jusqu'au jour J.

Le piège habituel consiste à publier la fiche du spectacle complète, tarif inclus, en attendant simplement d'ouvrir la billetterie plus tard. Résultat : le tarif apparaît dans le code source de la page dès la publication, consultable par n'importe quel visiteur curieux, bien avant la date de communication officielle.

## Structurer la fiche du spectacle

Sur un type de contenu `spectacle`, deux champs suffisent : `tarif_plein`, qui contient le prix du billet, et `date_ouverture_billetterie`, une date et heure précise à partir de laquelle le tarif devient consultable. Tant que cette date n'est pas atteinte, le tarif ne doit jamais transiter jusqu'au HTML rendu.

## La fonction de vérification

Comme pour toute condition d'affichage sensible au temps, une seule fonction centralise la logique :

> L'essentiel à retenir : L'affichage du tarif dépend uniquement d'une comparaison de dates ; Aucune modification du système de billetterie n'est nécessaire ; Le masquage fonctionne même si l'article est publié bien avant l'ouverture des ventes

```
function wpm_billetterie_ouverte( $post_id ) {
    $date_ouverture = get_post_meta( $post_id, 'date_ouverture_billetterie', true );

    if ( ! $date_ouverture ) {
        return false;
    }

    return current_time( 'timestamp' ) >= strtotime( $date_ouverture );
}
```

L'utilisation de `current_time( 'timestamp' )` plutôt que la fonction native `time()` garantit que la comparaison respecte le fuseau horaire configuré dans les réglages du site, un détail qui évite un décalage d'une heure en cas de changement d'heure d'été ou d'hiver mal anticipé.

## Afficher le tarif ou un message d'attente

```
if ( wpm_billetterie_ouverte( get_the_ID() ) ) {
    $tarif = get_post_meta( get_the_ID(), 'tarif_plein', true );
    echo '<p>Tarif plein : ' . esc_html( $tarif ) . ' €</p>';
} else {
    echo '<p>Tarifs communiqués à l\'ouverture de la billetterie</p>';
}
```

### Un compte à rebours pour maintenir l'intérêt

En complément du message d'attente, un compte à rebours simple jusqu'à la date d'ouverture entretient l'intérêt du visiteur sans dévoiler le tarif :

```
$date_ouverture = get_post_meta( get_the_ID(), 'date_ouverture_billetterie', true );
$jours_restants = ceil( ( strtotime( $date_ouverture ) - current_time( 'timestamp' ) ) / DAY_IN_SECONDS );

echo '<p>Ouverture de la billetterie dans ' . esc_html( $jours_restants ) . ' jours</p>';
```

## Protéger aussi l'API REST

Si le site expose ses spectacles via l'API REST, par exemple pour une application mobile partenaire, il ne suffit pas de masquer le tarif dans le template : le champ reste sinon consultable directement via une requête à l'endpoint REST. Un filtre sur la réponse retire le champ tant que la billetterie n'est pas ouverte :

```
add_filter( 'rest_prepare_spectacle', 'wpm_masquer_tarif_api_rest', 10, 2 );

function wpm_masquer_tarif_api_rest( $response, $post ) {
    if ( ! wpm_billetterie_ouverte( $post->ID ) ) {
        unset( $response->data['meta']['tarif_plein'] );
    }

    return $response;
}
```

## Cas particulier : ouverture anticipée pour un public privilégié

- Certaines salles proposent une prévente réservée aux abonnés avant l'ouverture publique.
- Un second champ `date_ouverture_abonnes`, antérieur à la date grand public, permet de gérer ce cas sans dupliquer la fiche du spectacle.
- La fonction de vérification accepte alors un paramètre indiquant si le visiteur est identifié comme abonné, sans complexifier l'affichage grand public.

> Conseil maison : pensez toujours à vérifier l'API REST en plus du template visible. Un champ masqué à l'écran mais encore exposé par une requête REST reste une fuite d'information, même si elle passe inaperçue au premier regard.

## En résumé

Masquer un tarif jusqu'à une date d'ouverture précise ne demande ni système de billetterie complet ni extension supplémentaire : une comparaison de dates, appliquée de façon cohérente au template comme à l'API REST, suffit à tenir la promesse de communication faite au public sans dévoiler le prix trop tôt.
