En bref
Quand le stock WooCommerce ne baisse pas après une commande, la cause la plus fréquente est une commande restée au statut « Attente paiement » : WooCommerce ne retire le stock qu’au paiement confirmé ou au passage en « En attente », « En cours » ou « Terminée ». Viennent ensuite la gestion des stocks désactivée sur le produit ou la variation, une synchronisation externe qui réécrit les quantités et une table de recherche des produits désynchronisée. Premier geste : ouvrez la commande et cherchez la note « Niveaux de stock réduits ».
Une commande arrive et la fiche produit affiche toujours la même quantité, ou un produit passe « En rupture de stock » alors que vos étagères sont pleines. Un stock faux fait vendre ce que vous n’avez plus, ou bloque des ventes possibles. Heureusement, la logique de WooCommerce est très prévisible, et en suivant les étapes ci-dessous dans l’ordre on retrouve presque toujours le maillon qui casse. Si la boutique est en pleine période de ventes et que vous ne pouvez pas tâtonner, notre service de dépannage WooCommerce intervient à distance.
Pourquoi le stock WooCommerce ne se met-il pas à jour ?
Le stock ne se met pas à jour quand la commande ne déclenche jamais l’événement qui le réduit, ou quand un autre outil réécrit la quantité juste après.
Dans le code de WooCommerce, la fonction qui retire le stock (wc_maybe_reduce_stock_levels) n’est appelée qu’à quatre moments : quand le moyen de paiement confirme le paiement, et quand la commande passe en « En attente » (on-hold), « En cours » (processing) ou « Terminée » (completed). WooCommerce marque alors la commande comme « stock déjà réduit » pour ne pas le retirer deux fois. Le stock revient en rayon quand la commande passe en « Annulée », revient en « Attente paiement » ou, depuis WooCommerce 11.0 (sorti le 4 août 2026), passe en « Échouée ».
Pendant le paiement, la commande est en « Attente paiement » : le stock est seulement réservé dans la table wp_wc_reserved_stock, pendant la durée du champ « Retenir le stock (minutes) » de WooCommerce > Réglages > Produits > Inventaire (60 minutes par défaut). Sans confirmation du paiement, la commande finit annulée et rien n’est déduit.
Les causes, de la plus fréquente à la plus rare :
- Commandes payées bloquées en « Attente paiement », parce que Stripe ou PayPal n’a pas prévenu le site. Aucune note de stock dans la commande.
- Gestion des stocks désactivée sur la boutique, le produit ou la variation : la quantité affichée est décorative.
- Produit variable mal réglé : stock suivi sur le parent alors que vous saisissez les quantités sur les variations.
- Synchronisation externe (caisse, ERP, marketplace, import CSV programmé) qui réécrit la quantité après chaque vente.
- Statut personnalisé ajouté par une extension (« Expédiée », « En préparation ») qui court-circuite les statuts qui réduisent le stock.
- Table de recherche ou cache en retard : le stock est juste en base, mais la boutique affiche une ancienne valeur.
Ce que nous voyons le plus souvent
En intervention, la plupart des stocks « qui ne bougent pas » viennent de commandes payées restées en « Attente paiement » parce que les webhooks (les messages automatiques que Stripe ou PayPal envoient au site pour confirmer un paiement) n’arrivent plus. Le deuxième classique est le logiciel de caisse qui remet chaque nuit les quantités de la veille.
Comment réparer un stock WooCommerce faux, étape par étape ?
On répare en suivant la vente de la commande jusqu’à la fiche produit. Avant toute manipulation, sauvegardez les fichiers et la base de données : plusieurs étapes modifient des quantités. Les commandes proposées utilisent WP-CLI, l’outil en ligne de commande de WordPress accessible en SSH chez la plupart des hébergeurs ; ses commandes WooCommerce exigent l’option –user avec l’identifiant d’un administrateur.
1. Lisez les notes de la commande
Ouvrez une commande récente qui aurait dû faire baisser le stock (WooCommerce > Commandes) et regardez les notes à droite. Quand le stock a été retiré, WooCommerce ajoute la note « Niveaux de stock réduits » (« Stock levels reduced » en anglais) avec le produit et la quantité avant et après, par exemple 12→11.
- Pas de note, commande en « Attente paiement » : le stock n’a jamais été retiré, allez à l’étape 3.
- Pas de note, commande « En cours » ou « Terminée » : suivi du stock désactivé (étape 2) ou statut personnalisé (étape 3).
- Note présente et correcte : WooCommerce a fait son travail, quelque chose réécrit le stock ensuite ou l’affichage est en retard (étapes 4 à 6).
2. Vérifiez que la gestion des stocks est vraiment active
Le suivi doit être actif sur toute la boutique (WooCommerce > Réglages > Produits > Inventaire, case « Activer la gestion des stocks ») puis sur chaque produit, dans l’onglet Inventaire de la fiche. Pour un produit variable, chaque variation a sa propre case : si vous gérez les quantités par taille ou par couleur, cochez-la sur les variations et décochez-la sur le parent. Remplacez 123 par l’identifiant du produit, visible dans l’adresse de sa page d’édition :
# Gestion des stocks activée sur la boutique ? (yes / no)
wp option get woocommerce_manage_stock
# Réglages de stock d'un produit
wp wc product get 123 --user=admin --fields=id,name,manage_stock,stock_quantity,stock_status,backorders
# Réglages de stock des variations d'un produit variable
wp wc product_variation list 123 --user=admin --fields=id,sku,manage_stock,stock_quantity,stock_statusSur une variation, manage_stock à « parent » signifie qu’elle puise dans le stock du produit parent.
3. Contrôlez le statut des commandes et le chemin du paiement
Filtrez les commandes sur « Attente paiement » et comparez avec le tableau de bord de votre prestataire. Si des commandes y sont payées, le problème est la confirmation du paiement (webhooks non reçus, pare-feu, tâches planifiées à l’arrêt) : nous détaillons ce diagnostic dans notre guide sur les commandes en attente de paiement. Une fois la confirmation réparée, passez les commandes réellement payées en « En cours » : le stock est retiré à ce moment-là.
Regardez aussi le menu déroulant des statuts d’une commande. Si une extension en a ajouté et que votre logistique y envoie les commandes directement, aucun des quatre déclencheurs n’est appelé : faites d’abord passer la commande par « En cours », ou demandez à l’éditeur de l’extension si elle gère le stock.
4. Cherchez ce qui réécrit le stock après la vente
Si la note de stock est correcte mais que la quantité revient en arrière, un autre outil écrit dans la fiche. Notez la quantité après une commande puis toutes les heures : un changement à heure fixe trahit une synchronisation programmée. Listez les connecteurs (caisse, marketplace, ERP, imports) et leurs tâches dans WooCommerce > Statut > Actions planifiées :
# Actions planifiées liées à la synchronisation et aux imports
wp action-scheduler action list --status=pending --fields=hook,group | grep -iE "sync|import|stock"
# Tâches WP-Cron classiques
wp cron event list --fields=hook,next_run_relative | grep -iE "sync|import|stock"Désignez ensuite une seule source de vérité, WooCommerce ou votre logiciel de caisse, et assurez-vous que chaque vente en ligne remonte à l’outil externe avant qu’il ne renvoie ses quantités. Si les actions planifiées s’accumulent, notre fiche sur les actions WooCommerce en retard explique comment relancer la file.
5. Régénérez les tables de recherche des produits
WooCommerce recopie le stock de chaque produit dans une table de recherche (wp_wc_product_meta_lookup) qui sert aux listes et aux filtres. Quand un import ou une requête SQL modifie le stock sans passer par WooCommerce, cette copie décroche : la fiche dit 5, le filtre « En stock » dit rupture. Cette requête, à lancer dans phpMyAdmin en remplaçant wp_ par le préfixe de vos tables, liste les écarts :
SELECT l.product_id, l.stock_quantity AS stock_table_recherche, pm.meta_value AS stock_fiche
FROM wp_wc_product_meta_lookup l
JOIN wp_postmeta pm ON pm.post_id = l.product_id AND pm.meta_key = '_stock'
WHERE l.stock_quantity <> CAST(pm.meta_value AS DECIMAL(10,2));S’il y a des lignes, régénérez la table dans WooCommerce > Statut > Outils ou en WP-CLI. Le traitement tourne en arrière-plan : comptez quelques minutes sur un gros catalogue.
# Liste des outils et de leur identifiant
wp wc tool list --user=admin --fields=id,name
# Régénération des tables de recherche des produits
wp wc tool run regenerate_product_lookup_tables --user=admin6. Videz les caches qui affichent l’ancienne quantité
Une page produit en cache garde la quantité du moment où elle a été générée. Videz le cache de votre extension (WP Rocket, LiteSpeed Cache…), de l’hébergeur et du CDN, puis le cache objet et les données temporaires (transients) :
wp cache flush
wp wc tool run clear_transients --user=adminSi le décalage revient à chaque vente, vérifiez que le cache de la page produit est bien purgé quand le stock change ; une règle trop agressive côté hébergeur peut l’empêcher. Notre article sur une boutique WooCommerce lente aborde cet équilibre entre vitesse et fraîcheur des données.
7. Corrigez les quantités et les commandes concernées
Corrigez ensuite le stock à partir d’un inventaire réel, dans la fiche ou en WP-CLI, ce qui met aussi à jour la table de recherche et le statut de stock :
# Produit simple
wp wc product update 123 --user=admin --stock_quantity=14
# Variation 456 du produit variable 123
wp wc product_variation update 123 456 --user=admin --stock_quantity=3Lors d’un remboursement, cochez la remise en stock des articles remboursés (« Restock refunded items ») : contrairement à une annulation, un remboursement seul ne remet rien en rayon. Et sur une version antérieure à 11.0, les commandes passées en « Échouée » après une réduction gardent leur stock bloqué : mettez WooCommerce à jour, après une sauvegarde et un test sur une copie du site.
À éviter
Modifier la méta _stock directement en SQL « pour aller plus vite » : la table de recherche et le statut de stock ne suivent pas. Évitez aussi de vider le champ « Retenir le stock (minutes) » pour régler des annulations : sans réservation, deux clients peuvent payer en même temps le dernier exemplaire.
Que faire si le stock devient négatif ou baisse deux fois ?
Un stock négatif vient presque toujours des commandes en réapprovisionnement (backorders) autorisées dans l’onglet Inventaire du produit : WooCommerce continue alors de vendre sous zéro, ce qui est voulu pour une précommande mais pas pour un article unique. Choisissez « Ne pas autoriser » si vous ne pouvez pas réassortir. Pour une double baisse, comparez la note de stock de la commande avec la fiche : si la note dit 12→11 et la fiche 10, une extension (marketplace, précommande, packs) retire aussi une unité. Désactivez-la sur une copie du site et passez une commande de test pour confirmer.
Comment éviter que le stock se dérègle à nouveau ?
- Contrôlez chaque semaine les commandes en « Attente paiement » de plus de quelques heures, premier symptôme d’une confirmation de paiement en panne.
- Gardez une seule source de vérité pour le stock et notez quel outil écrit quoi.
- Testez chaque mise à jour de WooCommerce et des connecteurs sur une copie du site, avec une commande complète.
- Activez les e-mails de stock faible et de rupture, et vérifiez qu’ils arrivent.
Si vous préférez déléguer cette surveillance, c’est le rôle de notre maintenance WordPress.
Quand faire appel à un professionnel ?
Dès que des commandes payées ne peuvent plus être honorées, que plusieurs outils écrivent dans les produits sans que vous sachiez lequel, ou que vous n’avez ni SSH ni phpMyAdmin, mieux vaut passer la main. C’est aussi le cas si la panne suit une mise à jour et s’accompagne d’une erreur à la validation de la commande ou de produits devenus impossibles à acheter.
En conclusion :
Un stock WooCommerce qui ne se met pas à jour n’a rien de mystérieux : soit la commande n’atteint pas un statut qui retire le stock, soit le suivi est mal réglé, soit un autre outil réécrit derrière. La note de stock de la commande, puis les réglages, les synchronisations et les caches vous mèneront au coupable.
Si le temps vous manque ou si la boutique vend des articles que vous n’avez plus, notre équipe DépannageWP s’en charge à distance : audit gratuit, 70 € TTC de l’heure, satisfait ou remboursé. Confiez-nous le dépannage de votre boutique WooCommerce.