Comment réparer 8 problèmes fréquents de WooCommerce

Vous avez configuré votre boutique WooCommerce. Les produits sont en ligne. Les moyens de paiement sont paramétrés. Tout semble parfait. Puis le premier client essaie de passer à la caisse… et rien ne fonctionne.

Le panier est vide. Le bouton de paiement ne fait rien. La commande reste bloquée sur « En attente de paiement » indéfiniment. Ou pire, le client est débité mais la commande n’est jamais enregistrée.

Si vous gérez une boutique WooCommerce assez longtemps, vous allez rencontrer ces bugs. La bonne nouvelle ? La plupart ont des solutions connues. Cet article couvre les échecs de paiement les plus courants, pourquoi ils surviennent, et comment les résoudre, des correctifs rapides aux débogages approfondis pour développeurs.

Table des matières

  1. Le panier vide à la caisse
  2. Les commandes bloquées sur « En attente de paiement »
  3. Les boutons de paiement qui ne font rien
  4. La page de paiement ne se charge pas (écran blanc / spinner infini)
  5. L’ajout au panier en AJAX cassé
  6. La perte de session et de données de panier
  7. Le débat : paiement en bloc vs paiement par shortcode
  8. Boîte à outils de débogage pour WooCommerce
  9. Prévention : une configuration WooCommerce stable

1. Le panier vide à la caisse

Le client ajoute des produits au panier. Clique sur « Paiement ». La page de paiement se charge… avec un panier vide. Le client part. Vous perdez une vente.

Pourquoi cela arrive :
C’est presque toujours un problème de session ou de cache. WooCommerce utilise des sessions PHP (ou parfois des transients WordPress) pour stocker les données du panier. Si quelque chose efface ou bloque cette session entre la page panier et la page de paiement, le panier apparaît vide.

Causes courantes :

  • Mise en cache agressive des pages (CDN ou cache hébergement)
  • Extensions de cache qui mettent en cache la page de paiement
  • Conflits de session avec d’autres extensions ou code personnalisé
  • Problèmes de contenu mixte (HTTP vs HTTPS)

Comment corriger :

Étape 1 : Exclure les pages WooCommerce du cache

Si vous utilisez une extension de cache (WP Rocket, W3 Total Cache, LiteSpeed Cache, etc.), excluez :

  • La page panier
  • La page paiement
  • La page Mon compte
  • La page boutique (optionnel mais recommandé)

Exemple pour WP Rocket : ajoutez ces URLs à « Ne jamais mettre en cache » :

/checkout/
/cart/
/my-account/

Étape 2 : Vérifiez le cache au niveau de l’hébergement

De nombreux hébergeurs (Kinsta, WP Engine, Cloudways) ont leur propre cache. Ajoutez les mêmes pages WooCommerce à la liste blanche dans les paramètres de cache de votre hébergeur.

Étape 3 : Testez avec le cache désactivé

Désactivez temporairement toutes les extensions de cache et tout CDN. Videz le cache de votre navigateur. Testez à nouveau. Si cela fonctionne, réactivez le cache une couche à la fois.

Étape 4 : Corrigez le contenu mixte

Si votre site charge en HTTPS mais certaines ressources en HTTP, le cookie de session pourrait ne pas persister. Utilisez une extension comme « Really Simple SSL » ou ajoutez à wp-config.php :

$_SERVER['HTTPS'] = 'on';

Étape 5 : Forcer la persistance du panier (solution développeur)

Ajoutez à functions.php comme solution temporaire :

add_action( 'init', 'wc_force_cart_persistence' );
function wc_force_cart_persistence() {
    if ( function_exists( 'WC' ) && is_null( WC()->session ) ) {
        WC()->session = new WC_Session_Handler();
        WC()->session->init();
    }
}

2. Les commandes bloquées sur « En attente de paiement »

Le client effectue le paiement. L’argent quitte son compte. Mais dans WooCommerce, la commande reste sur « En attente de paiement » indéfiniment. Pas d’email de confirmation. Pas de commande dans votre tableau de bord.

Pourquoi cela arrive :
La passerelle de paiement a envoyé la transaction réussie à WooCommerce, mais WooCommerce n’a jamais reçu ou traité le callback (webhook/IPN). Causes courantes :

  • Webhooks de la passerelle bloqués par un pare-feu ou une extension de sécurité
  • URL du site incorrecte (site en http:// mais webhook envoyé à https://)
  • Dépassement du temps d’exécution PHP ou de la limite mémoire lors du traitement du callback
  • Incohérence de devise ou de montant total entre la passerelle et WooCommerce

Comment corriger :

Étape 1 : Vérifiez manuellement le journal des transactions de la passerelle

Connectez-vous au tableau de bord Stripe, PayPal ou de votre passerelle. Trouvez la transaction. Est-elle marquée « Réussie » ou « En attente » ? Si elle est réussie chez eux mais pas chez vous, le webhook a échoué.

Étape 2 : Vérifiez les URLs des webhooks

Pour Stripe : Dashboard → Développeurs → Webhooks. Assurez-vous que l’URL est https://votresite.com/wc-api/stripe/ (ou similaire pour votre passerelle).

Pour PayPal : L’URL IPN doit être https://votresite.com/wc-api/paypal/.

Étape 3 : Vérifiez les extensions de sécurité

Wordfence, Sucuri et d’autres pare-feux bloquent parfois les IP des webhooks. Ajoutez les adresses IP de la passerelle à la liste blanche. Désactivez temporairement le pare-feu pour tester.

Étape 4 : Finalisez manuellement la commande

Si vous avez confirmé le paiement en dehors de WooCommerce, vous pouvez marquer manuellement la commande comme « Terminée » ou « En traitement » depuis l’écran WooCommerce → Commandes. Envoyez ensuite un email manuellement au client.

Étape 5 : Renvoyez les webhooks échoués (Stripe)

Stripe permet de renvoyer les événements webhook échoués depuis le tableau de bord. Cherchez les événements « Échoués » et cliquez sur « Renvoyer ».

Étape 6 : Journalisation des débogages

Ajoutez à wp-config.php pour journaliser toutes les erreurs WooCommerce :

define( 'WC_LOG_DIR', WP_CONTENT_DIR . '/wc-logs/' );

Consultez ensuite wp-content/wc-logs/ pour fatal-errors.log ou les logs spécifiques à la passerelle.

3. Les boutons de paiement qui ne font rien

Le client clique sur « Passer la commande » ou sur le bouton PayPal/Stripe. Le bouton tourne, ou rien ne se passe. Pas de message d’erreur. Pas de redirection.

Pourquoi cela arrive :
Conflit JavaScript, erreur dans la console du navigateur, ou échec AJAX. Le plus courant : un script d’extension ou du thème casse le JavaScript de la caisse.

Comment corriger :

Étape 1 : Ouvrez la console du navigateur

Appuyez sur F12 → onglet Console. Cherchez des erreurs en rouge. Les plus courantes :

  • Uncaught ReferenceError: jQuery is not defined
  • Uncaught TypeError: Cannot read property 'xxx' of undefined
  • Failed to load resource (scripts bloqués)

Étape 2 : Vérifiez les conflits JavaScript

Basculez temporairement vers un thème par défaut (Storefront, Twenty Twenty-Four). Testez la caisse. Si cela fonctionne, votre thème est le problème.

Si toujours cassé, désactivez toutes les extensions sauf WooCommerce et votre passerelle de paiement. Testez. Réactivez une par une.

Étape 3 : Corrigez les problèmes courants de jQuery

WooCommerce a besoin de jQuery. Si votre thème appelle jQuery incorrectement, ajoutez :

function ensure_jquery_on_checkout() {
    if ( is_checkout() ) {
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'ensure_jquery_on_checkout' );

Étape 4 : Vérifiez les scripts manquants de la passerelle

Certaines passerelles nécessitent des scripts supplémentaires sur la page de paiement. Assurez-vous que votre thème appelle wp_head() et wp_footer() dans header.php et footer.php.

Étape 5 : Activez le mode débogage de la caisse

Dans WooCommerce → Réglages → Paiements → [Votre passerelle] → Activez « Mode débogage » (journaliser les erreurs). Consultez ensuite wp-content/uploads/wc-logs/.

4. La page de paiement ne se charge pas (écran blanc / spinner infini)

Le client clique sur « Paiement » et voit un écran blanc ou un spinner de chargement qui ne s’arrête jamais.

Pourquoi cela arrive :
Erreur fatale PHP, épuisement de la mémoire, ou boucle infinie dans un hook. Souvent causé par une extension qui essaie de modifier incorrectement les champs de paiement.

Comment corriger :

Étape 1 : Activez WP_DEBUG

Ajoutez à wp-config.php :

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Consultez ensuite wp-content/debug.log pour les erreurs fatales.

Étape 2 : Augmentez la limite mémoire

Ajoutez à wp-config.php :

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

Étape 3 : Vérifiez les redirections infinies

Parfois, une extension ou un code personnalisé crée une boucle entre le panier et la caisse. Vérifiez votre fichier .htaccess pour des règles de réécriture bizarres. Renommez temporairement .htaccess en .htaccess_old et testez.

Étape 4 : Validez les surcharges des champs de paiement

Si vous avez du code personnalisé modifiant les champs de paiement, commentez-le temporairement. Recherchez les fonctions accrochées à woocommerce_checkout_fields.

5. L’ajout au panier en AJAX cassé

Le client clique sur « Ajouter au panier » sur une page produit. Le bouton tourne, mais le compteur du panier ne se met pas à jour. La page se recharge. Ou rien ne se passe.

Pourquoi cela arrive :
Conflit AJAX, endpoint wc-ajax manquant, ou cache.

Comment corriger :

Étape 1 : Vérifiez l’URL AJAX

Affichez la source de la page. Recherchez wc_ajax_url. Elle doit pointer vers /?wc-ajax=%%endpoint%%. Si c’est faux, vérifiez vos permaliens (Réglages → Permaliens → Enregistrer les modifications. Pas besoin de modifier, juste réenregistrer).

Étape 2 : Excluez les endpoints AJAX du cache

Ajoutez wc-ajax à la liste « Ne jamais mettre en cache » de votre extension de cache.

Étape 3 : Vérifiez un fichier .htaccess corrompu

Réesenregistrez les permaliens (Réglages → Permaliens → Enregistrer les modifications). Cela régénère les règles .htaccess.

Étape 4 : Test d’ajout au panier manuel

Visitez https://votresite.com/?add-to-cart=123 (remplacez 123 par un ID produit réel). Si cela fonctionne mais pas l’AJAX, le problème est JavaScript.

6. La perte de session et de données de panier

Le client se connecte, ajoute des produits au panier, se déconnecte, se reconnecte: le panier est vide. Ou le panier se vide aléatoirement entre les chargements de page.

Pourquoi cela arrive :
Problèmes de gestionnaire de session, corruption de table de base de données, ou problèmes de cookies.

Comment corriger :

Étape 1 : Réparez les tables de session WooCommerce

Dans phpMyAdmin ou équivalent, exécutez :

REPAIR TABLE wp_woocommerce_sessions;
OPTIMIZE TABLE wp_woocommerce_sessions;

Étape 2 : Effacez toutes les sessions (attention: déconnecte tous les clients)

Depuis WP CLI :

wp wc tool run clear_sessions

Ou utilisez une extension comme « WooCommerce Database Cleanup ».

Étape 3 : Vérifiez les paramètres des cookies

Dans WooCommerce → Réglages → Avancé → Pages, assurez-vous que les pages Panier et Paiement sont correctement assignées.

Étape 4 : Forcez la gestion des sessions

Ajoutez à functions.php :

add_action( 'init', 'wc_force_session_start' );
function wc_force_session_start() {
    if ( function_exists( 'WC' ) && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }
}

7. Le débat : paiement en bloc vs paiement par shortcode

WooCommerce propose désormais deux expériences de paiement :

  • Paiement en bloc (par défaut, utilise l’éditeur de blocs)
  • Paiement par shortcode (classique [woocommerce_checkout])

Lequel casse le moins ?
Actuellement, le paiement par shortcode est plus stable, mais le paiement en bloc rattrape son retard.

Si le paiement en bloc est cassé :

Option 1 : Revenir au paiement par shortcode

  1. Créez une nouvelle page, ajoutez le shortcode [woocommerce_checkout]
  2. Dans WooCommerce → Réglages → Avancé → Pages, définissez « Paiement » sur cette nouvelle page
  3. Videz le cache

Option 2 : Corriger les problèmes du paiement en bloc

  • Assurez-vous que votre thème supporte le bloc de paiement (nécessite le bloc woocommerce/checkout)
  • Mettez à jour WooCommerce et toutes les extensions
  • Vérifiez si du CSS personnalisé casse la mise en page du bloc

Bugs connus du paiement en bloc (en 2026) :

  • Les hooks de champs personnalisés ne fonctionnent pas toujours
  • Certaines passerelles de paiement ne se chargent pas
  • Conflits d’autocomplétion d’adresse

Recommandation : Utilisez le paiement par shortcode pour les boutiques en production jusqu’à ce que le paiement en bloc soit plus mature.

8. Boîte à outils de débogage pour WooCommerce

Quand un bug de paiement apparaît, utilisez ces outils avant d’appeler à l’aide :

OutilCe qu’il fait
Rapport d’état WooCommerceWooCommerce → Statut → État du système. Copiez-collez dans les demandes d’assistance.
WP_DEBUG_LOGCapture les erreurs PHP. Essentiel pour les écrans blancs.
Console navigateur (F12)Affiche les erreurs JavaScript qui cassent la caisse.
Health Check & TroubleshootingExtension qui permet de désactiver extensions/thème seulement pour votre session.
Logs WooCommerceWooCommerce → Statut → Logs. Cherchez fatal-errorsstripepaypal, etc.
Site de stagingClonez votre site en production pour tester les correctifs sans temps d’arrêt.

Flux de débogage rapide :

  1. Activez WP_DEBUG_LOG
  2. Reproduisez le problème
  3. Vérifiez debug.log et les logs WooCommerce
  4. Vérifiez la console du navigateur
  5. Désactivez toutes les extensions sauf WooCommerce + passerelle
  6. Basculez vers le thème Storefront
  7. Si corrigé, réactivez une par une
  8. Ne testez jamais en production pendant les heures de pointe

9. Prévention : une configuration WooCommerce stable

La plupart des bugs de paiement sont évitables. Suivez ces règles :

Règle 1 : Ne mettez jamais en cache les pages panier, paiement ou mon compte
Utilisez les paramètres d’exclusion de votre extension de cache religieusement.

Règle 2 : Gardez tout à jour
WooCommerce cœur, extensions de passerelle de paiement, WordPress, et votre thème. Code ancien = bugs anciens.

Règle 3 : Testez régulièrement les passerelles de paiement
Effectuez une transaction test de 1 € une fois par semaine. Vous détecterez les échecs de webhook tôt.

Règle 4 : Utilisez un site de staging
Ne mettez jamais à jour WooCommerce ou ne modifiez la logique de paiement d’abord sur votre site en production.

Règle 5 : Limitez les personnalisations de la caisse
Chaque champ personnalisé ou snippet JavaScript est un point de rupture potentiel. Utilisez des hooks, pas des modifications de fichiers cœur.

Règle 6 : Surveillez les webhooks échoués
Les tableaux de bord Stripe et PayPal montrent les tentatives de webhook échouées. Vérifiez-les chaque semaine.

Règle 7 : Choisissez un hébergement fiable
Un hébergement bon marché avec un cache agressif et des limites PHP basses cassera WooCommerce. Utilisez un hébergement WordPress géré si possible.

Réflexions finales

Les bugs de paiement WooCommerce sont frustrants, pour vous et pour les clients qui veulent simplement vous donner de l’argent. Mais presque chaque bug a une solution connue. La clé est un débogage systématique : vérifiez d’abord le cache, puis les conflits JavaScript, puis les webhooks, puis les problèmes de base de données.

Quand un client signale un bug de paiement, demandez-lui :

  • Que s’est-il passé exactement ? (Bouton inactif ? Message d’erreur ? Écran blanc ?)
  • Quel navigateur et quel appareil ?
  • Cela arrive à chaque fois ou parfois ?

Et rappelez-vous : Avant de toucher à quoi que ce soit sur une boutique en production, faites une sauvegarde. Clonez vers un environnement de staging si possible. Et testez toujours après chaque modification.

Votre caisse est votre pipeline de revenus. Gardez-la propre, testée et surveillée.

Ce billet vous a été utile?
Offrez-nous un café!