Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

Calculer la surface habitable depuis les pièces d’une annonce immobilière

Plutôt que de compter sur l'agent pour additionner la surface de chaque pièce, un champ calculé automatiquement évite les oublis et les erreurs de saisie.

Par WordPress Développement • 12 janvier 2020 • 4 min de lecture • Aucun commentaire
Calculer la surface habitable depuis les pièces d'une annonce immobilière

Sept pièces saisies une à une, une calculette ouverte dans un autre onglet, et pourtant le total affiché sur la fiche ne correspond jamais tout à fait à ce qui figure sur le plan. C’est le lot de toute agence qui laisse ses agents renseigner la surface totale à la main, pièce par pièce.

La correction la plus simple ne consiste pas à ajouter une nouvelle case à cocher de vérification, mais à supprimer purement et simplement la saisie manuelle du total. Si chaque pièce est déjà renseignée dans un champ répétable, la somme peut être calculée par WordPress lui-même, à chaque enregistrement de la fiche.

La structure de champs de départ

Une annonce type comporte un groupe répétable « pièces », avec pour chaque ligne un intitulé (« séjour », « chambre 1 »…) et une surface en mètres carrés. Le champ « surface habitable totale », lui, existait jusque-là comme un simple champ numérique libre, rempli à la main par l’agent.

La bascule consiste à transformer ce champ en une valeur lecture seule, recalculée automatiquement à partir des lignes du tableau répétable, sans jamais laisser l’humain reprendre la main dessus.

Le recalcul au moment de l’enregistrement

L'essentiel à retenir : Somme automatique sur un groupe de champs répétables ; Recalcul à chaque enregistrement ; Champ en lecture seule pour l'agent

Le hook acf/save_post se déclenche après l’enregistrement des champs personnalisés d’ACF, ce qui permet de lire les valeurs fraîchement saisies dans le tableau répétable et de mettre à jour le champ total juste après.

add_action( 'acf/save_post', function( $post_id ) {
    if ( get_post_type( $post_id ) !== 'annonce_immo' ) {
        return;
    }

    $pieces = get_field( 'pieces', $post_id );
    $total  = 0;

    if ( is_array( $pieces ) ) {
        foreach ( $pieces as $piece ) {
            $total += (float) $piece['surface_m2'];
        }
    }

    update_field( 'surface_habitable_totale', $total, $post_id );
}, 20 );

La priorité 20 garantit que le tableau répétable a déjà été enregistré au moment où le calcul s’exécute, condition indispensable pour lire des valeurs à jour et non celles de la version précédente de la fiche.

Rendre le champ visiblement calculé

Un champ en lecture seule qui ressemble à un champ éditable trompe l’agent, qui finit par cliquer dedans et se demander pourquoi rien ne se passe. Il vaut mieux ajouter un message explicite dans les instructions du champ ACF, du type « valeur calculée automatiquement à partir des pièces ci-dessus », et désactiver la saisie via l’attribut readonly proposé nativement par ACF.

  • Champ numérique en lecture seule, jamais masqué
  • Instruction visible rappelant l’origine du calcul
  • Recalcul déclenché uniquement à l’enregistrement, jamais en temps réel côté navigateur

Gérer les surfaces non comptabilisées

Toutes les pièces ne comptent pas dans la surface habitable : un garage, une cave ou un balcon doivent en être exclus, alors qu’une véranda chauffée peut, elle, être incluse selon les critères retenus par l’agence. La solution la plus propre consiste à ajouter, sur chaque ligne du répétable, une case à cocher « compter dans la surface habitable », lue dans la boucle de calcul.

foreach ( $pieces as $piece ) {
    if ( ! empty( $piece['compter_surface_habitable'] ) ) {
        $total += (float) $piece['surface_m2'];
    }
}

Afficher le détail sur la fiche publique

Le total calculé gagne à être accompagné, côté front, du détail pièce par pièce qui a servi à l’obtenir. Cela rassure le visiteur et évite les questions sur la méthode de calcul retenue, un point régulièrement soulevé lors des visites.

Un champ calculé qu’on ne peut pas vérifier reste suspect aux yeux du visiteur. Toujours afficher le détail qui a permis d’obtenir le total.

Vérifier la cohérence avec le nombre de pièces annoncé

Une agence qui annonce « quatre pièces » sur une fiche dont le tableau répétable n’en contient que trois expose une incohérence immédiatement visible pour un visiteur attentif. Un second calcul, comparant le nombre de lignes du tableau répétable au champ « nombre de pièces » saisi séparément, permet d’afficher une alerte discrète dans l’administration lorsque les deux valeurs ne concordent pas.

$nombre_pieces_declare = (int) get_field( 'nombre_pieces', $post_id );
$nombre_pieces_reel    = is_array( $pieces ) ? count( $pieces ) : 0;

if ( $nombre_pieces_declare !== $nombre_pieces_reel ) {
    // Afficher une notice d'incohérence à l'agent avant publication.
}

Ce contrôle secondaire n’empêche pas la publication, contrairement à un champ obligatoire absent : il se contente d’attirer l’attention de l’agent sur une saisie probablement incomplète, à charge pour lui de corriger avant de mettre l’annonce en ligne.

Pour aller plus loin

Ce calcul reste volontairement simple et ne remplace en rien la validation légale d’un diagnostic de surface, qui répond à des règles de mesure distinctes. Il permet surtout d’éliminer une source d’erreur humaine récurrente sur un point que les visiteurs vérifient en premier lieu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi