vendredi 25 septembre 2026

À propos

Contact

E-commerce

Vendre en B2B avec WooCommerce : tarifs par rôle, catalogue caché et validation de comptes

Comment structurer une boutique WooCommerce qui vend à la fois aux particuliers et aux professionnels, avec des tarifs différenciés et un catalogue réservé aux comptes validés.

Par Clément Hadrot • 1 décembre 2022 • 5 min de lecture • Aucun commentaire
Vendre en B2B avec WooCommerce : tarifs par rôle, catalogue caché et validation de comptes

Une entreprise de quincaillerie qui vendait jusqu’ici uniquement en B2C nous a demandé d’ouvrir une offre professionnelle sur la même boutique WooCommerce, avec des tarifs négociés visibles uniquement par les artisans ayant un compte validé. C’est une demande très courante, et WooCommerce la gère bien à condition de ne pas se contenter d’un plugin générique de « masquage de prix », qui résout à peine la moitié du problème.

Une vraie boutique B2B repose sur trois piliers distincts : une segmentation claire des comptes, une tarification différenciée fiable, et un parcours de validation qui évite qu’un simple particulier ne s’inscrive en se déclarant professionnel pour accéder aux tarifs réduits.

Créer un rôle utilisateur professionnel

Plutôt que de s’appuyer sur une simple case cochée en méta utilisateur, il est plus robuste de créer un rôle WordPress dédié, par exemple client_pro, avec les mêmes capacités qu’un rôle customer WooCommerce standard :

add_action( 'init', function () {
    if ( ! get_role( 'client_pro' ) ) {
        add_role( 'client_pro', 'Client professionnel', get_role( 'customer' )->capabilities );
    }
} );

Ce rôle sert ensuite de point d’ancrage fiable pour toutes les règles de tarification et de visibilité, plutôt que de multiplier des vérifications de méta utilisateur dispersées dans le code, difficiles à maintenir et à auditer dans la durée.

Différencier les tarifs par rôle

Le filtre woocommerce_product_get_price (et son équivalent pour le prix affiché, woocommerce_get_price_html) permet d’appliquer une remise conditionnée au rôle de l’utilisateur connecté :

add_filter( 'woocommerce_product_get_price', function ( $prix, $produit ) {
    if ( is_user_logged_in() && in_array( 'client_pro', wp_get_current_user()->roles, true ) ) {
        $remise = (float) $produit->get_meta( '_remise_pro_pourcentage' ) ?: 15;
        return $prix - ( $prix * $remise / 100 );
    }
    return $prix;
}, 20, 2 );

Pour une tarification par palier de quantité plutôt qu’un simple pourcentage fixe, une extension dédiée de prix par grille de quantité reste préférable à un développement maison : la gestion des paliers cumulés et des exceptions par catégorie devient vite complexe à maintenir à la main.

L'essentiel à retenir : Un rôle utilisateur personnalisé permet d'appliquer des règles de prix et de visibilité distinctes ; Un compte professionnel doit être validé manuellement avant d'accéder aux tarifs négociés ; Masquer les prix n'a de sens que combiné à un vrai parcours de demande de devis

Masquer le catalogue et organiser la demande de devis

Masquer les prix aux visiteurs non identifiés comme professionnels n’a de sens que si un parcours alternatif existe : un simple prix masqué sans action possible frustre le visiteur au lieu de le convertir. La bonne pratique consiste à remplacer le bouton d’ajout au panier par un bouton « Demander un devis » pour les visiteurs non professionnels, via le filtre woocommerce_is_purchasable combiné à un formulaire de contact ou une extension de devis dédiée :

add_filter( 'woocommerce_is_purchasable', function ( $est_achetable, $produit ) {
    if ( $produit->get_meta( '_reserve_professionnels' ) === 'oui' && ! current_user_can_access_pro_catalog() ) {
        return false;
    }
    return $est_achetable;
}, 10, 2 );

Valider manuellement les comptes professionnels

Laisser n’importe quel visiteur s’auto-attribuer le rôle professionnel via un simple champ de formulaire annule tout l’intérêt de la segmentation. Le parcours recommandé passe par une inscription en rôle intermédiaire (client_pro_en_attente), avec un champ SIRET ou numéro de TVA intracommunautaire, puis une validation manuelle par l’équipe commerciale avant bascule vers le rôle client_pro définitif :

add_action( 'user_register', function ( $user_id ) {
    if ( isset( $_POST['compte_professionnel'] ) ) {
        $utilisateur = new WP_User( $user_id );
        $utilisateur->set_role( 'client_pro_en_attente' );

        wp_mail(
            get_option( 'admin_email' ),
            'Nouvelle demande de compte professionnel',
            'Un compte professionnel est en attente de validation : ' . $utilisateur->user_email
        );
    }
} );

Le cas des tarifs affichés hors TVA

Une boutique mixte B2C/B2B doit aussi décider si les tarifs professionnels s’affichent hors taxes. WooCommerce > Réglages > Taxes > Afficher les prix dans la boutique permet de définir un affichage hors taxes global, mais pour un affichage différencié selon le rôle (TTC pour les particuliers, HT pour les professionnels), il faut surcharger l’affichage via woocommerce_get_price_html plutôt que le réglage global, qui s’applique uniformément à tous les visiteurs.

La confusion la plus fréquente sur les projets B2B mixtes reste l’affichage TTC/HT incohérent selon le profil du visiteur. C’est un détail qui, mal géré, entame sérieusement la confiance d’un acheteur professionnel habitué à raisonner hors taxes.

En résumé

Une boutique WooCommerce hybride B2C/B2B tient sur trois fondations : un rôle utilisateur professionnel clairement défini, une tarification différenciée appliquée au niveau du prix réel plutôt que du seul affichage, et un parcours de validation qui empêche un simple particulier de s’auto-déclarer professionnel. Ces trois éléments combinés évitent le double écueil d’un catalogue trop ouvert ou d’un parcours trop fermé qui découragerait de véritables clients professionnels.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi