E-commerce

Cross-sell et upsell WooCommerce — hooks, order bumps, mesure GA4

11 دقائق للقراءة

Cet article décrit l’implémentation technique du cross-selling (vente complémentaire) et de l’upselling (montée en gamme) sur WooCommerce, avec les hooks natifs, les plugins courants en 2026, et les indicateurs à suivre dans WooCommerce Analytics.

1 — Définitions précises

  • Upselling — proposer une version plus chère ou plus complète du produit que le client envisage. Exemple : pagne wax 6 yards à la place de 2 yards ; smartphone 256 Go à la place de 128 Go.
  • Cross-selling — proposer un produit complémentaire au produit dans le panier. Exemple : ceinture avec un pantalon ; protection d’écran avec un smartphone.
  • Order bumps — proposition d’un produit additionnel à bas prix sur la page de paiement (case à cocher), distincte du cross-sell qui s’affiche au panier.

Indicateur clé : le panier moyen (Average Order Value, AOV). Une augmentation de 10 % du panier moyen sur 1 000 commandes/mois à 25 000 FCFA équivaut à 2 500 000 FCFA de chiffre supplémentaire mensuel sans coût d’acquisition additionnel.

2 — Cross-sells et upsells natifs WooCommerce

Dans Produits > Modifier le produit > Données du produit > Produits liés, deux champs natifs :

  • Ventes incitatives (Upsells) — affichées en bas de la fiche produit dans la section « Vous aimerez peut-être aussi ».
  • Ventes croisées (Cross-sells) — affichées sur la page panier sous « Vous pourriez être intéressé par ».

Le rendu repose sur les hooks woocommerce_after_single_product_summary (priorité 15 pour upsells) et woocommerce_cart_collaterals (cross-sells). Pour personnaliser le titre et le nombre :

// Limiter à 3 upsells, 4 colonnes
add_filter('woocommerce_upsell_display_args', function($args) {
    $args['posts_per_page'] = 3;
    $args['columns'] = 4;
    $args['orderby'] = 'rand';
    return $args;
});

// Limiter à 4 cross-sells dans le panier
add_filter('woocommerce_cross_sells_total', function() { return 4; });
add_filter('woocommerce_cross_sells_columns', function() { return 4; });

Récupérer les IDs programmatiquement :

$product = wc_get_product($product_id);
$upsells = $product->get_upsell_ids();
$cross_sells = $product->get_cross_sell_ids();

3 — Cross-sell automatique basé sur l’historique

Un cross-sell statique défini produit par produit ne tient pas l’échelle au-delà de 200 SKUs. Solution : utiliser les associations d’achats observées dans la base.

// Top 5 produits achetés avec le produit X (sur les 90 derniers jours)
function get_frequently_bought_with($product_id, $limit = 5) {
    global $wpdb;
    return $wpdb->get_col($wpdb->prepare("
        SELECT oim2.meta_value AS related_id
        FROM {$wpdb->prefix}woocommerce_order_items oi1
        JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim1
          ON oi1.order_item_id = oim1.order_item_id AND oim1.meta_key = '_product_id'
        JOIN {$wpdb->prefix}woocommerce_order_items oi2
          ON oi1.order_id = oi2.order_id AND oi1.order_item_id != oi2.order_item_id
        JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim2
          ON oi2.order_item_id = oim2.order_item_id AND oim2.meta_key = '_product_id'
        WHERE oim1.meta_value = %d
          AND oi1.order_id IN (
            SELECT ID FROM {$wpdb->posts}
            WHERE post_type = 'shop_order'
              AND post_status = 'wc-completed'
              AND post_date >= DATE_SUB(NOW(), INTERVAL 90 DAY)
          )
        GROUP BY oim2.meta_value
        ORDER BY COUNT(*) DESC
        LIMIT %d
    ", $product_id, $limit));
}

Cette requête lit les Custom Order Tables si activées (WooCommerce 8.2+ avec HPOS). Pour la version legacy (postmeta), adapter le JOIN sur {$wpdb->prefix}postmeta. Mettre la requête en cache transient avec set_transient pour 1 heure afin d’éviter une exécution à chaque vue produit.

4 — Order bumps et popup upsells

Plugins éprouvés en 2026 :

Plugin Fonction Tarif (annuel)
CartFlows Pro Funnels checkout, order bumps, one-click upsells ~199 USD
FunnelKit (ex-WooFunnels) Funnels avancés, A/B test natif ~249 USD
WooCommerce Frequently Bought Together (officiel) Bundles avec remise ~79 USD
Beeketing for WooCommerce Personalized Recommendation, Mobile Converter Plan gratuit + premium variable

Pour un order bump simple sans plugin payant, utiliser le hook woocommerce_review_order_before_payment :

add_action('woocommerce_review_order_before_payment', function() {
    $bump_product_id = 1234; // ID du produit à proposer
    $product = wc_get_product($bump_product_id);
    if (!$product) return;
    $cart_has = false;
    foreach (WC()->cart->get_cart() as $item) {
        if ($item['product_id'] == $bump_product_id) { $cart_has = true; break; }
    }
    if ($cart_has) return;
    echo '<div class="order-bump">
        <label>
            <input type="checkbox" name="add_bump" value="1">
            Ajouter ' . esc_html($product->get_name()) . ' à votre commande pour ' . wc_price($product->get_price()) . '
        </label>
    </div>';
});

add_action('woocommerce_checkout_update_order_meta', function($order_id) {
    if (!empty($_POST['add_bump'])) {
        $order = wc_get_order($order_id);
        $order->add_product(wc_get_product(1234), 1);
        $order->calculate_totals();
        $order->save();
    }
});

Tester le scénario en navigation privée pour valider que la case n’est pas cochée par défaut (case pré-cochée enfreint les règles de protection du consommateur OHADA pour les produits payants supplémentaires).

5 — Mesurer dans WooCommerce Analytics

Le rapport Commandes (WooCommerce > Analyses > Commandes) expose les colonnes :

  • Articles vendus — total des unités, hors livraison.
  • Valeur moyenne des commandes — l’AOV à suivre dans le temps.
  • Articles par commande — en hausse quand cross-sell fonctionne.

Filtrer sur la période avant et après l’activation des order bumps. Une variation significative apparaît typiquement à partir de 200 commandes mensuelles. Sous ce volume, le bruit statistique masque le signal.

Pour un suivi par funnel, ajouter des événements GA4 personnalisés sur les hooks d’upsell :

// JS côté front, déclenché à l'affichage de l'upsell post-ajout panier
gtag('event', 'view_promotion', {
    promotion_id: 'upsell_panier',
    promotion_name: 'Cross-sell page panier',
    items: [{item_id: window.cross_sell_id, item_name: window.cross_sell_name}]
});

// À l'acceptation de l'upsell
gtag('event', 'select_promotion', { /* mêmes paramètres */ });

Le ratio select_promotion / view_promotion donne le taux d’acceptation de l’upsell. Cibles indicatives : 5 à 15 % pour un cross-sell pertinent ; sous 2 %, retirer la suggestion.

6 — Erreurs courantes

  • Cross-sell non lié au panier — proposer un produit sans rapport (carte mémoire avec un t-shirt) baisse la confiance. La cohérence catégorielle prime.
  • Trop d’upsells en une page — au-delà de 3 produits affichés, l’utilisateur se sent harcelé et abandonne. Tester avec 1 puis 3 maximum.
  • Order bump à plus de 30 % du panier — l’effet de surprise positive joue jusqu’à environ 25-30 % du montant de base. Au-delà, perçu comme une vente forcée.
  • Pré-cocher la case order bump — illégal au sens des codes de consommation (Sénégal, France, Côte d’Ivoire). Toujours laisser l’utilisateur cocher activement.
  • Cross-sell après 24h par email sans contexte — performance < 1 %. Préférer un email post-livraison à J+7 ciblant le produit acheté pour proposer son complément naturel.

Références

Cross-sell vs upsell — distinction et impact

Le cross-sell propose des produits complementaires (acheter un appareil photo + suggerer trepieds, batteries, carte memoire). L upsell propose une version superieure du meme produit (modele 64 Go → version 128 Go pour 30 EUR de plus). Ces deux techniques cibles l augmentation du panier moyen sans depense marketing supplementaire — donc avec un retour sur investissement immediat.

Les benchmarks 2024-2026 sur l e-commerce montrent qu un cross-sell ou upsell bien place augmente le panier moyen de 10 a 30 pour cent. McKinsey publie regulierement que 35 pour cent des revenus Amazon proviennent de mecanismes de recommandation produit — c est l ordre de grandeur du potentiel pour qui industrialise.

Les hooks WooCommerce essentiels

WooCommerce expose une serie de hooks qui permettent d injecter du contenu personnalise a chaque etape du parcours d achat. Les plus utiles pour cross-sell et upsell :

woocommerce_after_single_product_summary (apres le bloc resume produit en page produit) — l endroit standard pour afficher des produits relies. WooCommerce remplit automatiquement avec les related products bases sur les categories et tags ; on peut remplacer par une logique custom.

woocommerce_after_cart_table (apres le tableau du panier) — le moment ideal pour proposer un cross-sell juste avant le checkout. C est l emplacement avec le meilleur taux de conversion observe.

woocommerce_review_order_after_cart_contents (sur la page checkout) — un dernier rappel pour les produits a faible cout (livraison express, garantie etendue, emballage cadeau). Eviter de surcharger pour ne pas distraire de la finalisation.

woocommerce_thankyou (page de remerciement post-achat) — propose un produit pour la commande suivante, avec coupon de reduction limite dans le temps. Excellente conversion sur les emails declenches.

Order bumps — le pattern qui convertit

L order bump est une offre additionnelle a faible cout proposee directement sur la page de checkout, avec une case a cocher. Le client decide en 2 secondes : ajouter ou non. C est le format avec le meilleur taux de conversion en e-commerce (10-20 pour cent typique). Cible : produits a panier moyen 30-300 EUR avec offre complementaire a 5-30 EUR.

Plugins WooCommerce qui implementent les order bumps : CartFlows Pro, WooFunnels, ou un dev custom en 100 lignes de PHP. Le pattern visuel : un bloc encadre, titre court (Ajoutez X pour Y EUR), checkbox visible, mise a jour du total en temps reel via AJAX. Tester plusieurs offres et mesurer la conversion par offre est la cle.

Recommandations basees sur l IA

Trois approches existent en 2026 pour les recommandations intelligentes au-dela des Related Products de base.

Recommendation engines self-hosted. Pour un site de 100-1000 SKU, un algorithme simple based sur les co-achats historiques (clients qui ont achete X ont aussi achete Y) suffit. Implementation SQL ou Python sur des donnees Orders WooCommerce. Bibliotheques comme Surprise (Python) ou implicit (Python) pour des algorithmes collaboratifs.

Recommendation engines SaaS. Algolia Recommend, Klevu, Searchspring, Bloomreach. Plug-and-play avec WooCommerce via plugins officiels. 100-500 USD/mois selon volume. Cible : 1000-10000 SKU avec besoin de recommandations sophistiquees mais sans equipe data dediee.

Approche LLM. Pour des sites avec descriptifs riches, un LLM peut generer des suggestions contextuelles a partir du produit consulte (description, attributs, prix) et du catalogue. Couts : quelques centimes par session. Pas encore le standard mais en montee.

Mesure dans Google Analytics 4

Sans mesure, l optimisation est aveugle. Trois evenements GA4 a configurer specifiquement pour le cross-sell et l upsell.

view_cross_sell (event custom) : declenche quand un cross-sell est affiche au visiteur. Permet de mesurer l exposition.

click_cross_sell : declenche quand un visiteur clique sur un cross-sell. Mesure l interet.

add_to_cart with promo_source : ajouter le parametre custom promo_source: cross_sell_cart a l evenement add_to_cart quand le produit ajoute provient d un cross-sell. Permet de mesurer la conversion finale.

Avec ces trois evenements, le rapport GA4 Custom Reports montre le funnel cross-sell expose → cliques → ajoute → achete, et le revenu attribue. Optimiser uniquement ce qui a un impact mesurable.

Erreurs frequentes a eviter

Surcharger la page produit. Plus de 8-10 produits relies degradent la conversion principale. Garder 4-6 cross-sells maximum, soigneusement choisis.

Proposer des produits trop chers. Un cross-sell a 50 EUR sur un panier de 80 EUR cree de l incertitude. Cible : le cross-sell doit etre 20-40 pour cent du panier initial maximum pour un effet bump.

Manque de pertinence. Un cross-sell sans rapport avec le produit consulte est ignore ou meme penalisant. Les Related Products WooCommerce par defaut (memes categories) sont souvent trop generiques — meilleur de definir manuellement les associations pour les top sellers.

Pas de test A/B. Decision sur des intuitions plutot que sur des donnees. GrowthBook ou un simple AB test maison teste deux placements ou deux offres et tranche en 2-4 semaines avec significativite statistique.

FAQ

Comment definir manuellement des cross-sell sur un produit WooCommerce ?
Dans l edition d un produit, onglet Donnees produit → Produits associes. Renseigner Vente croisee (panier) et Vente incitative (page produit). Ces produits seront affiches en priorite sur les hooks correspondants.

Quel impact des order bumps sur le taux d abandon checkout ?
Variable. Bien faits, les order bumps n affectent pas le taux d abandon (le visiteur les ignore s ils ne l interessent pas). Mal faits (offres trop nombreuses, design intrusif, mise a jour AJAX lente), ils peuvent doubler le taux d abandon. A/B tester chaque ajout.

Faut-il proposer des cross-sells sur des produits gratuits ou a faible marge ?
Sur les produits gratuits (lead magnets), oui — c est le moment ideal pour proposer un upsell vers une version payante. Sur les produits a faible marge, le cross-sell doit avoir une marge superieure pour ameliorer la marge moyenne par commande.

Comment integrer le cross-sell avec les programmes de fidelite ?
Combiner naturellement : un cross-sell peut offrir des points fidelite bonus a l achat (Achetez Y et gagnez 50 points fidelite supplementaires). Augmente la conversion sans toucher au prix unitaire.

References

Service ITSkillsCenter

Application mobile Android et iOS

Création d'application mobile Android et iOS. À partir de 350 000 FCFA.

Démarrer mon projet
Publicité