Départs de Train (iRail)
WordPress plugin: real-time train departures via the iRail (SNCB) API. Cached, error-handled, 18 PHPUnit tests, CI.
by Yassine Boukamir · github.com/yboukamir/wp-departs-train · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/yboukamir/wp-departs-train/archive/refs/heads/main.zipReadme
Départs de Train (iRail) — plugin WordPress
Plugin WordPress léger qui affiche, via un simple shortcode, les prochains départs de train en temps réel pour une gare belge — en s'appuyant sur l'API publique iRail (données SNCB).

C'est la version WordPress du même principe que mon outil Départs de train (JavaScript pur, 27 tests) : même API, même philosophie de gestion d'erreurs — mais packagé comme un vrai plugin WordPress, avec cache et tests PHPUnit.
Pourquoi ce projet
La plupart de mes projets clients sont sous WordPress, mais mes dépôts publics ne montraient jusqu'ici que du JavaScript. Ce plugin comble ce manque : il montre comment j'intègre une API externe dans WordPress, avec les mêmes exigences que sur mes autres outils — un test par cas d'erreur, pas seulement pour le chemin nominal.
Fonctionnalités
- Shortcode
[departs_train]: tableau des prochains départs (heure, destination, voie, statut). - Mise en cache (60 secondes, via les transients WordPress) pour éviter de solliciter l'API à chaque chargement de page.
- Gestion explicite de chaque cas d'échec : gare introuvable, API injoignable (timeout, réseau coupé), réponse malformée — chacun a son propre code d'erreur et son message, et chacun est couvert par un test.
- Zéro dépendance JavaScript : rendu entièrement côté serveur.
Installation
- Copier le dossier du plugin dans
wp-content/plugins/wp-departs-train. - Activer « Départs de Train (iRail) » depuis l'administration WordPress.
- Ajouter le shortcode dans une page ou un article :
[departs_train station="Charleroi-Sud"]
[departs_train station="Bruxelles-Central" limit="5"]
| Attribut | Défaut | Description |
|---|---|---|
station |
(vide) | Nom de la gare (voir la liste des gares iRail). |
limit |
8 |
Nombre maximum de départs affichés. |
Aperçu sans installer WordPress
php -S localhost:8080 -t demo demo/preview.php
Ouvre http://localhost:8080 : le rendu utilise le vrai code du plugin
(Departs_Train_Shortcode::render_result()) avec des données d'exemple
(demo/fixtures.php), sans aucun appel réseau. C'est ce script qui a
servi à générer la capture d'écran ci-dessus.
Tests
composer install
composer test
18 tests couvrent : le cache (écriture, lecture, expiration), le client
iRail (gare introuvable, panne réseau, réponse malformée, JSON invalide,
troncature par limit, mise en cache effective — vérifiée en comptant
les appels HTTP réels), et le rendu HTML (échappement des caractères,
y compris un test de non-régression XSS explicite).
La logique métier (includes/) est volontairement découplée de
WordPress : le client HTTP et le cache sont injectables, ce qui permet
de tester chaque cas d'erreur sans dépendre d'une installation
WordPress complète ni du réseau.
Architecture
departs-train.php Fichier principal du plugin (hooks WordPress)
includes/
class-cache.php Couche de cache (transients WP, fallback mémoire pour les tests)
class-irail-client.php Appel API iRail + parsing + gestion d'erreurs
class-shortcode.php Rendu HTML du shortcode
assets/css/style.css Styles du widget
demo/
preview.php Aperçu local sans WordPress (voir ci-dessus)
fixtures.php Données d'exemple utilisées par preview.php
tests/ Suite PHPUnit (18 tests)
.github/workflows/tests.yml CI : tests sur PHP 7.4, 8.1 et 8.3
Licence
MIT — voir LICENSE.
Par Yassine Boukamir, développeur web.