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

E-commerce

Construire un configurateur de devis chantier avec ACF et WooCommerce

Une entreprise du BTP veut que ses clients configurent eux-mêmes un devis en ligne, transformé automatiquement en commande WooCommerce sans ressaisie manuelle.

Par WordPress Développement • 4 juin 2023 • 4 min de lecture • Aucun commentaire
Construire un configurateur de devis chantier avec ACF et WooCommerce

acf_add_local_field_group() : cette fonction, familière à quiconque a déjà structuré un groupe de champs Advanced Custom Fields en PHP, est le point de départ le plus solide pour construire un configurateur de devis chantier sans dépendre d’une extension de configurateur premium généraliste, souvent mal adaptée aux unités et contraintes propres au bâtiment (mètres carrés, types de matériaux, contraintes d’accès au chantier).

Une entreprise de rénovation qui vend des travaux de terrasse en bois composite, par exemple, veut que son client puisse indiquer la surface, choisir le matériau et la finition directement en ligne, et obtenir un devis chiffré sans attendre un rappel commercial pour les demandes standard qui ne nécessitent pas de visite préalable.

Structurer les options avec ACF

Le configurateur repose sur un groupe de champs ACF attaché au produit WooCommerce « Terrasse composite », avec un champ numérique pour la surface, un champ de sélection pour le matériau (trois références de lames avec des prix au mètre carré différents), et un champ de sélection pour la finition (pose droite ou pose en diagonale, cette dernière majorée pour la découpe supplémentaire).

acf_add_local_field_group( array(
    'key'    => 'group_configurateur_terrasse',
    'title'  => 'Configurateur terrasse',
    'fields' => array(
        array( 'key' => 'field_surface', 'name' => 'surface_m2', 'type' => 'number' ),
        array( 'key' => 'field_materiau', 'name' => 'materiau', 'type' => 'select',
            'choices' => array( 'lame_standard' => 'Lame standard', 'lame_premium' => 'Lame premium' ) ),
        array( 'key' => 'field_finition', 'name' => 'finition', 'type' => 'select',
            'choices' => array( 'droite' => 'Pose droite', 'diagonale' => 'Pose diagonale' ) ),
    ),
    'location' => array( array( array( 'param' => 'post_type', 'operator' => '==', 'value' => 'product' ) ) ),
) );

Calculer le prix avant l’ajout au panier

Le calcul du prix se fait côté serveur, via le filtre woocommerce_add_cart_item_data, qui reçoit les champs du formulaire de configuration soumis sur la fiche produit et calcule le prix final avant l’ajout effectif au panier.

L'essentiel à retenir : Les champs ACF pilotent les options du configurateur ; Chaque combinaison calcule un prix avant ajout au panier ; La commande générée reste modifiable avant validation administrative
add_filter( 'woocommerce_add_cart_item_data', function ( $cart_item_data, $product_id ) {
    if ( empty( $_POST['surface_m2'] ) ) {
        return $cart_item_data;
    }
    $tarifs_materiau = array( 'lame_standard' => 65, 'lame_premium' => 95 );
    $majoration_finition = ( 'diagonale' === $_POST['finition'] ) ? 1.15 : 1;

    $prix = floatval( $_POST['surface_m2'] )
        * $tarifs_materiau[ $_POST['materiau'] ]
        * $majoration_finition;

    $cart_item_data['prix_configure'] = round( $prix, 2 );
    $cart_item_data['config_surface']  = $_POST['surface_m2'];
    $cart_item_data['config_materiau'] = $_POST['materiau'];
    return $cart_item_data;
}, 10, 2 );

Appliquer le prix calculé

Le prix ainsi calculé doit ensuite remplacer le prix par défaut du produit dans le panier, via le hook woocommerce_before_calculate_totals, qui permet de modifier le prix de chaque article avant que WooCommerce ne calcule les totaux de commande.

add_action( 'woocommerce_before_calculate_totals', function ( $cart ) {
    foreach ( $cart->get_cart() as $item ) {
        if ( isset( $item['prix_configure'] ) ) {
            $item['data']->set_price( $item['prix_configure'] );
        }
    }
} );

De la commande brouillon au devis validé

La commande générée par ce configurateur reste volontairement dans un statut intermédiaire (« En attente de validation ») plutôt que d’être immédiatement confirmée : un chargé d’affaires vérifie la faisabilité technique (accès au chantier, contraintes de terrain) avant de basculer la commande vers un statut permettant le paiement effectif de l’acompte.

  • Le client configure sa terrasse et obtient un prix indicatif immédiat.
  • La commande est créée en statut intermédiaire, avec les détails de configuration en métadonnées.
  • Un chargé d’affaires valide ou ajuste la commande avant envoi du lien de paiement de l’acompte.

Un configurateur qui chiffre instantanément un prix rassure le client, mais ce n’est jamais une raison suffisante pour sauter l’étape de validation humaine sur un chantier réel : le terrain a toujours le dernier mot sur le devis en ligne.

Ce que ce dispositif ne traite pas

La validation administrative du devis par le chargé d’affaires — vérification de la faisabilité technique, ajustement éventuel du prix après visite — reste un processus métier distinct, mené en dehors de WooCommerce, et n’est pas couvert par cette architecture technique de configuration et de calcul de prix.

Les limites de ce socle technique

Ce socle ACF plus deux hooks WooCommerce suffit à couvrir un configurateur à trois variables. Au-delà (options combinées, remises par palier de surface, matériaux multiples sur un même chantier), il devient pertinent d’externaliser le calcul dans une classe PHP dédiée plutôt que d’empiler les conditions dans un unique hook.

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