Aller au contenu
Portfolio/Centres PMS
Projet n° 008 · 2025

Centres
PMS

Un service public essentiel, enfin lisible — pour chaque famille, quel que soit son profil.

Site WebUI/UXAccessibilité
Client
Centres PMS de Woluwe
Année
2025
Durée
12 semaines
Équipe
Mihai · Charles
Visiter le site
pmswl.be/
Aperçu du site
Aperçu mobile
Fig. 001 — Centres PMSAperçu site web

Résultats mesurés

86+
Écoles géolocalisées
6
Centres PMS couverts
1
Carte interactive sur-mesure
5
Custom Post Types métier

Le contexte.

Un service public essentiel, enfin lisible — pour chaque famille, quel que soit son profil.

Le réseau PMS de Woluwe accompagne des milliers de familles chaque année — mais leur ancien site ne traduisait plus cette réalité. Les trois centres couvraient 86 écoles différentes, avec des agents, des spécialités et des créneaux propres à chacune.

L'approche.

Nous avons conçu le site autour d'une idée centrale : chaque visiteur doit trouver ce qui le concerne en moins de trois clics, quel que soit son profil. Côté technique, cela a impliqué de modéliser tout le réseau en Custom Post Types WordPress — centres, écoles, agents, offres, ressources — reliés entre eux via ACF. Le cœur du projet est un plugin cartographique développé entièrement sur-mesure : school-centers-map, avec géocodage Nominatim, cache MySQL dédié, et deux shortcodes pour la carte interactive et l'annuaire filtrable.

« Un service public essentiel, enfin lisible pour toutes les familles. »

Le résultat.

Les écoles du réseau sont géolocalisées et consultables en temps réel. Les 6 centres PMS, leurs agents et leurs spécialités sont structurés et maintenables sans développeur. Le client gère tout son contenu depuis son tableau de bord.

Stack technique

Frontend
WordPress
Backend
PHP
Base
ACF
Infra
Leaflet.js

Livrables

  • 01CPT `pms_center` avec slug `/centres-pms/` et champs ACF : téléphone, téléphone direction, directeur/directrice (nom, titre, email, photo)
  • 02CPT `school` avec champs ACF : type (fondamentale / secondaire / FS / SS), adresse, photo, site web, email général agents, projet Amarrage+ (champ conditionnel), relation vers centre PMS associé
  • 03CPT `teacher` (agents PMS) avec champs : email, photo, 4 spécialités (psychologique, sociale, logopédique, santé), relation multi-écoles, statut absent/présent avec nom et email du remplaçant (logique conditionnelle ACF)
  • 04CPT `job_posting` avec champs : période (date début/fin), lien externe, texte bouton, type de contrat (5 options), ville, relation lieu (école ou centre PMS), mise en avant toggle
  • 05CPT `resource` avec sections générées automatiquement et tri personnalisé via `change_pms_centers_archive_order()`
  • 06Shortcode `[school_centers_map]` : carte Leaflet.js 1.9.4, centrage Belgique (50.8503, 4.3517), zoom configurable, chargement AJAX avec nonce `scm_ajax_nonce`
  • 07Shortcode `[school_centers_directory]` : annuaire filtrable rendu par SCM_School_Directory_Renderer, popup école avec contacts agents
  • 08Shortcode `[global_school_search]` : recherche AJAX temps réel (min. 2 caractères) couvrant écoles et centres PMS, surbrillance des termes via `<mark>`, overlay clavier
  • 09Géocodeur Nominatim (OpenStreetMap) avec table MySQL `wp_scm_geocode_cache` (address, lat, lng, created_at), normalisation d'adresse, fallback coordonnées villes belges connues, retry WP Cron à +5 min en cas d'échec
  • 10Stratégie de cache two-layer : coordonnées en post meta `_scm_lat`/`_scm_lng` (permanentes), données complètes écoles en transient WordPress (invalidation intelligente sur `save_post_school`, `save_post_teacher`, `save_post_pms_center`)
  • 11Invalidation de cache instantanée vs différée : mise à jour immédiate pour une école avec coordonnées existantes, `wp_schedule_single_event` +10s pour teachers et centres PMS
  • 12Page d'administration 'Cache de la Carte' avec statistiques (nombre d'écoles, géocodées, temporaires, sans coordonnées, taille cache, expiration) et actions (vider, régénérer, géocoder tout)
  • 13Tâche WP Cron `scm_warm_cache` hebdomadaire pour régénération automatique du cache de la carte
  • 14Chargement conditionnel des assets : Leaflet CSS/JS enqueués uniquement quand `[school_centers_map]` est présent sur la page, idem pour les assets annuaire
  • 15Template `single-pms_center.php` : affichage du directeur, liste des écoles associées avec agents PMS par école, gestion email général vs emails individuels
  • 16Page `page-jobs-stages.php` : filtrage dynamique des offres actives par date (`job_period_end >= today`), tri mise en avant en premier
  • 17Hero Section : page d'options ACF (`acf_add_options_page`) avec image, titre et texte de présentation gérables depuis l'admin
  • 18Thème enfant astra-child avec `wp_enqueue_scripts` priority 99 et variante astra-child-minimal sans enqueue pour compatibilité CSS dynamique Astra
Carte interactive — 86+ écoles géolocalisées sur Bruxelles
Répertoire des écoles — annuaire filtrable avec agents PMS rattachés
Ressources, documents et liens classés par catégorie
Recherche globale sur tous les éléments dynamiques du site en temps réel
Carte interactive — 86+ écoles géolocalisées sur Bruxelles
01 / 04

Chronologie

Analyse & architecture
Identification des entités métier (centres PMS, écoles, agents, offres, ressources), modélisation des relations ACF (école → centre PMS, agent → écoles), choix du stack : thème enfant Astra + plugin découplé.
2 semaines
Custom Post Types & ACF
Enregistrement de 5 CPTs via register_post_type() : pms_center, school, teacher (agents PMS), job_posting, resource. Définition des groupes de champs ACF en code (acf_add_local_field_group) : 4 spécialités agents, logique conditionnelle absence/remplacement, champ Amarrage+.
2 semaines
Plugin school-centers-map
Développement du plugin v1.3.0 : classe SchoolCentersMap (singleton), 6 classes métier (SCM_Geocoder, SCM_Cache_Manager, SCM_School_Data_Provider, SCM_Map_Renderer, SCM_Global_Search, SCM_School_Directory_Renderer). Géocodage Nominatim avec table de cache MySQL dédiée (wp_scm_geocode_cache). Deux shortcodes : [school_centers_map] et [school_centers_directory].
4 semaines
Templates & pages
Création des templates PHP dans le thème enfant : single-pms_center.php, archive-pms_center.php, page-nos-ecoles.php, page-jobs-stages.php, page-ressources.php. Page Hero Section avec interface d'administration ACF Options.
2 semaines
Performance & cache
Mise en place de la stratégie de cache : coordonnées stockées en post meta (_scm_lat, _scm_lng), invalidation intelligente sur save_post (hooks acf/save_post priority 20 et 25), WP Cron hebdomadaire scm_warm_cache, page d'administration cache avec statistiques de géocodage.
1 semaine
Migration thème enfant & stabilisation
Migration de tout le code custom depuis le thème parent vers astra-child. Création de la variante astra-child-minimal (sans wp_enqueue_style) pour résoudre le conflit avec le CSS dynamique d'Astra. Tests cross-browser, flush des règles de réécriture.
1 semaine
Prochaine étude de cas · 013

Ferme de Basseilles

Lire l'étude