2021 : le simulateur de loyer indicatif d’une agence de gestion locative est développé directement dans les fonctions du thème, faute de temps pour construire une extension séparée. Cinq ans plus tard, ce choix mérite d’être réévalué, non pas parce qu’il a mal vieilli sur le plan technique brut, mais parce que le barème de référence utilisé pour l’estimation a été révisé plusieurs fois depuis, et que chaque révision a imposé une intervention directe dans le code du thème.
Le simulateur reste fonctionnel : un formulaire dans le thème collecte la surface du bien, le nombre de pièces et le quartier concerné, puis un calcul en PHP renvoie une fourchette de loyer mensuel indicatif. Le problème ne se situe pas dans le fonctionnement du simulateur lui-même, mais dans l’endroit où vit sa logique de calcul.
Ce que le code d’origine a bien fait
Le calcul était isolé dans une fonction dédiée, agence_calculer_loyer_indicatif(), appelée depuis le gabarit du formulaire via un point d’entrée AJAX enregistré avec add_action( 'wp_ajax_calculer_loyer', ... ) et son équivalent pour les visiteurs non connectés. Cette séparation entre le gabarit d’affichage et la fonction de calcul a évité le pire : un calcul mélangé au HTML, impossible à faire évoluer sans risquer de casser l’affichage.
function agence_calculer_loyer_indicatif( $surface, $nb_pieces, $quartier ) {
$prix_m2 = agence_bareme_par_quartier( $quartier );
$coefficient = agence_coefficient_pieces( $nb_pieces );
$majoration = agence_majoration_etat_bien( $surface );
return round( $surface * $prix_m2 * $coefficient + $majoration, 2 );
}
Ce que cinq ans d’évolutions du marché ont révélé

À trois reprises depuis la mise en place initiale, une révision du barème de référence utilisé par l’agence a imposé de modifier directement ces fonctions du thème : ajustement des prix au mètre carré par quartier, ajout d’un nouveau coefficient lié à une typologie de bien non prévue à l’origine, révision des majorations liées à l’état général du bien. Chaque modification a nécessité de redéployer le thème dans son intégralité, alors que seule la logique de calcul avait changé.
Cette dépendance a créé un risque à chaque mise à jour : toute correction visuelle du thème, même sans lien avec le simulateur, passait par le même processus de déploiement que les révisions de barème, avec le même niveau de vigilance requis pour les deux, ce qui a ralenti plus d’une fois des correctifs visuels urgents en attendant une validation métier du calcul, alors que rien dans ces correctifs ne touchait au calcul lui-même.
Ce qui aurait dû être fait dès le départ
- Extraire la logique de calcul dans une extension indépendante du thème, activable et désactivable séparément
- Versionner les barèmes de prix au mètre carré dans une structure de données distincte du code, modifiable sans toucher aux fonctions PHP
- Séparer le cycle de déploiement des évolutions visuelles de celui des révisions de barème locatif
Ce qui a bien vieilli malgré tout
Le point d’entrée AJAX lui-même n’a jamais posé de problème : la fonction reste appelée de la même manière côté formulaire depuis cinq ans, sans rupture de compatibilité. La logique de séparation entre gabarit et calcul, bien que mal placée dans le thème plutôt que dans une extension, a au moins évité l’écueil d’un calcul mélangé directement au HTML du formulaire, ce qui aurait rendu chaque modification bien plus risquée.
Isoler un calcul métier sensible dans son propre plugin ne coûte pas beaucoup plus cher au départ, et évite cinq ans plus tard de redéployer tout un thème pour une simple révision de barème.
Notre verdict
Cinq ans après sa mise en place, le simulateur fonctionne toujours correctement, ce qui prouve que le code d’origine n’était pas mauvais en soi. Mais son emplacement, au cœur du thème plutôt que dans une extension séparée, a rendu chaque révision de barème plus lourde qu’elle n’aurait dû l’être. L’extraction de cette logique vers un plugin dédié est désormais planifiée, non pas pour corriger un bug, mais pour découpler deux cycles de changement qui n’ont jamais eu vocation à avancer ensemble.