Un menu affiché sur un site web qui propose encore un plat épuisé depuis midi frustre plus un client qu’il ne l’informe. Pour un food truck qui prépare un nombre limité de portions par service, ce cas d’usage précis n’a besoin ni d’un module de caisse, ni d’un système de commande complet : un simple compteur par plat, décrémenté à chaque clic de commande annoncée, suffit à refléter la disponibilité réelle du jour.
Ce cas s’appuie sur un menu géré via des articles classiques, avec une métadonnée numérique représentant les portions restantes. Le principe reste volontairement minimal : il ne remplace pas la caisse du camion, il informe seulement le visiteur du site avant qu’il ne se déplace pour rien.
La structure de données retenue
Chaque plat du jour est un article standard, avec deux métadonnées : _stock_du_jour, un entier remis à zéro chaque matin par le gérant, et _stock_restant, décrémenté à chaque clic sur un bouton « Je le veux ». Aucune table personnalisée n’est nécessaire pour ce volume : quelques plats par jour, remis à zéro quotidiennement.

Réinitialiser le stock chaque matin
function foodtruck_reinitialiser_stock() {
$plats = get_posts( array(
'post_type' => 'plat_jour',
'posts_per_page' => -1,
) );
foreach ( $plats as $plat ) {
$stock_initial = get_post_meta( $plat->ID, '_stock_du_jour', true );
update_post_meta( $plat->ID, '_stock_restant', (int) $stock_initial );
}
}
add_action( 'foodtruck_reset_quotidien', 'foodtruck_reinitialiser_stock' );
Cette fonction est déclenchée par une tâche planifiée quotidienne, enregistrée à l’activation de l’extension avec wp_schedule_event(). Le gérant modifie _stock_du_jour depuis l’écran d’édition de chaque plat la veille au soir, et la réinitialisation matinale s’occupe du reste sans intervention manuelle.
Décrémenter le stock sans passer par une caisse
Le clic sur « Je le veux » déclenche un appel AJAX qui décrémente le compteur, sans jamais impliquer de transaction financière — l’achat se fait physiquement au camion, le site sert uniquement à réserver visuellement une portion et à décourager un affichage trompeur :
function foodtruck_ajax_reserver_portion() {
check_ajax_referer( 'foodtruck_reservation', 'nonce' );
$plat_id = isset( $_POST['plat_id'] ) ? (int) $_POST['plat_id'] : 0;
$stock_restant = (int) get_post_meta( $plat_id, '_stock_restant', true );
if ( $stock_restant <= 0 ) {
wp_send_json_error( array( 'message' => 'Ce plat est épuisé pour aujourd\'hui.' ) );
}
update_post_meta( $plat_id, '_stock_restant', $stock_restant - 1 );
wp_send_json_success( array( 'stock_restant' => $stock_restant - 1 ) );
}
add_action( 'wp_ajax_foodtruck_reserver', 'foodtruck_ajax_reserver_portion' );
add_action( 'wp_ajax_nopriv_foodtruck_reserver', 'foodtruck_ajax_reserver_portion' );
La vérification $stock_restant <= 0 empêche le compteur de devenir négatif, y compris en cas de double clic rapide, même si une vérification purement côté serveur ne protège pas parfaitement contre deux requêtes strictement simultanées — un détail acceptable ici, vu le faible volume de commandes concurrentes sur un service de food truck.
Ce que cette approche ne prétend pas résoudre
- Aucune synchronisation avec un terminal de paiement physique : la décrémentation reste déclarative, pas transactionnelle.
- Aucune gestion de file d’attente ou de créneau horaire : le compteur reflète une disponibilité globale du jour, pas un ordre de passage.
- Aucune notification automatique au gérant lorsque le stock atteint zéro : un simple coup d’œil au tableau de bord suffit à ce volume.
Un outil pensé pour informer plutôt que pour vendre évite bien des complications inutiles, tant que le volume reste à l’échelle d’un service quotidien.
En résumé
Pour un food truck, deux métadonnées numériques et un appel AJAX suffisent à afficher fidèlement les ruptures de stock du jour, sans les fonctionnalités complètes d’un point de vente. La simplicité de cette solution est justement sa force : elle correspond exactement au volume et au rythme réel de l’activité, sans complexité superflue à maintenir.