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

— Résultats mesurés
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.
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
— 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





