Combien de départs un circuit accompagné programme-t-il réellement par saison ? Pour une petite agence de voyage spécialisée, la réponse tourne souvent autour d’une poignée de dates par circuit et par an — un volume qui ne justifie en rien l’installation d’un moteur de réservation complet avec gestion de tarification dynamique, de disponibilité en temps réel multi-canal et de paiement en ligne intégré.
Ce cas d’usage construit une solution volontairement limitée : chaque circuit est un type de contenu personnalisé, chaque départ programmé une entrée répétable avec un statut simple. L’objectif reste précis : informer un visiteur du site sur la disponibilité réelle d’un départ, sans jamais prétendre gérer la réservation elle-même, qui continue de se faire par téléphone ou en agence physique.
La structure retenue
Le circuit lui-même reste un article classique, enrichi d’une description et d’une image. Les départs programmés sont stockés sous forme de tableau sérialisé dans une métadonnée unique, plutôt que dans une table personnalisée — un choix justifié par le faible volume de données concerné, qui ne demande pas la complexité d’une structure relationnelle dédiée :
[
{ "date": "2023-04-14", "statut": "ouvert", "places_restantes": 6 },
{ "date": "2023-05-02", "statut": "complet", "places_restantes": 0 },
{ "date": "2023-06-18", "statut": "annule", "places_restantes": 0 }
]

Saisir les départs depuis l’administration
function agence_metabox_departs() {
add_meta_box(
'agence_departs',
'Départs programmés',
'agence_afficher_metabox_departs',
'circuit'
);
}
add_action( 'add_meta_boxes', 'agence_metabox_departs' );
function agence_afficher_metabox_departs( $post ) {
$departs = get_post_meta( $post->ID, '_departs_programmes', true );
$departs = $departs ? json_decode( $departs, true ) : array();
wp_nonce_field( 'agence_departs_nonce', 'agence_nonce' );
?>
<textarea name="departs_json" rows="6" cols="60"><?php
echo esc_textarea( wp_json_encode( $departs, JSON_PRETTY_PRINT ) );
?></textarea>
<p>Format JSON : date, statut (ouvert, complet, annule), places_restantes.</p>
<?php
}
Une saisie via un champ JSON reste volontairement rudimentaire pour ce volume limité de départs par circuit ; une interface plus élaborée, avec des champs répétables individuels, deviendrait pertinente si le nombre de départs annuels augmentait significativement.
Afficher la disponibilité côté public
function agence_afficher_departs( $circuit_id ) {
$departs_json = get_post_meta( $circuit_id, '_departs_programmes', true );
$departs = $departs_json ? json_decode( $departs_json, true ) : array();
echo '<table><thead><tr><th>Date de départ</th><th>Disponibilité</th></tr></thead><tbody>';
foreach ( $departs as $depart ) {
$libelle = match ( $depart['statut'] ) {
'ouvert' => $depart['places_restantes'] . ' places restantes',
'complet' => 'Complet',
'annule' => 'Départ annulé',
default => 'Non communiqué',
};
printf(
'<tr><td>%s</td><td>%s</td></tr>',
esc_html( $depart['date'] ),
esc_html( $libelle )
);
}
echo '</tbody></table>';
}
Ce que cette solution ne prétend pas résoudre
- Aucune tarification dynamique selon le remplissage ou la période de réservation.
- Aucun paiement en ligne : la réservation reste confirmée par contact direct avec l’agence.
- Aucune gestion automatique de liste d’attente en cas de départ complet.
- Aucune synchronisation avec un système de réservation de transport tiers.
Pourquoi cette limitation reste un choix assumé
Un moteur de réservation complet impose une charge de maintenance et un coût de licence rarement justifiés pour un volume de quelques dizaines de départs annuels répartis sur un petit nombre de circuits. Cette solution simplifiée couvre le besoin réel — informer avant de contacter l’agence — sans complexité superflue à faire évoluer chaque saison.
Le bon outil n’est pas toujours le plus complet : c’est celui qui correspond exactement au volume et au processus de vente réels de l’activité concernée.
En résumé
Pour une agence de voyage au volume de départs limité, un type de contenu personnalisé associé à une métadonnée structurée en JSON suffit à afficher une disponibilité fiable, sans les mécanismes complexes d’un moteur de réservation. Cette approche reste évolutive : elle peut migrer vers une structure plus élaborée le jour où le volume de circuits et de départs le justifiera réellement.