vendredi 25 septembre 2026

À propos

Contact

Extensions

Conflit entre extensions : la méthode pour isoler le coupable

Un formulaire de contact qui refuse soudain d'envoyer ses courriels, sans aucune erreur visible. Trois extensions installées la même semaine. Laquelle est en cause ?

Par Clément Hadrot • 12 septembre 2022 • 5 min de lecture • Aucun commentaire
Conflit entre extensions : la méthode pour isoler le coupable

Symptôme. Sur le site d’un cabinet de conseil en recrutement, le formulaire de contact WordPress natif via une extension de formulaires cessait, du jour au lendemain, d’envoyer les courriels de confirmation. Aucun message d’erreur visible côté visiteur, aucune ligne suspecte dans les journaux du serveur mail. Trois extensions avaient été installées la même semaine par l’équipe marketing, sans lien apparent avec les formulaires : un plugin de statistiques, un plugin de pop-up promotionnel, et une extension de sauvegarde automatique.

Diagnostic : isoler sans perturber les visiteurs

Désactiver des extensions une par une directement en production aurait affecté tous les visiteurs pendant l’investigation, un risque difficile à assumer pour un site professionnel en pleine activité. Le plugin officiel Health Check & Troubleshooting propose un mode de dépannage qui résout précisément ce problème : il désactive les extensions et le thème uniquement pour l’administrateur connecté en session de dépannage, en laissant le site strictement inchangé pour tous les autres visiteurs.

  • Activer le mode de dépannage depuis l’écran Outils du plugin Health Check
  • Réactiver les extensions une par une, dans cette session isolée, en testant le formulaire après chaque réactivation
  • Le thème actif peut lui aussi être temporairement basculé vers un thème par défaut, pour écarter une hypothèse de conflit côté template

La bisection : diviser le nombre de suspects par deux

L'essentiel à retenir : Le mode de dépannage isole le site sans désactiver les extensions pour les visiteurs ; La bisection par moitié réduit rapidement le nombre de suspects ; Query Monitor révèle les hooks et requêtes exécutés sans avoir à ajouter de code

Avec sept extensions actives au total, tester une par une de façon linéaire aurait pu prendre sept cycles de test. La bisection réduit ce nombre de façon logarithmique : réactiver la moitié des extensions, tester, puis réduire l’ensemble suspect de moitié à chaque itération selon que le problème réapparaît ou non.

Extensions actives : A, B, C, D, E, F, G
Test avec A, B, C, D  -> le formulaire échoue toujours
Test avec A, B        -> le formulaire fonctionne
Test avec C, D        -> le formulaire échoue
Test avec C seul      -> le formulaire fonctionne
Test avec D seul      -> le formulaire échoue -> coupable identifié

Sur ce site, quatre itérations ont suffi à identifier l’extension de sauvegarde automatique comme responsable, un résultat que personne n’aurait deviné intuitivement tant son lien avec l’envoi de courriels semblait improbable.

Comprendre le mécanisme du conflit avec Query Monitor

Une fois le coupable présumé identifié, Query Monitor a permis de comprendre le mécanisme exact sans avoir à lire l’intégralité du code source de l’extension. Son panneau « Hooks & Actions » liste, pour chaque hook déclenché sur la page, l’ensemble des callbacks accrochés et leur extension d’origine.

Hook : wp_mail
  10 - backup_plugin_intercepter_mail() [extension : sauvegarde-auto]
  10 - wpcf7_mail_sent_callback() [extension : contact-form-7]

L’extension de sauvegarde automatique interceptait le hook wp_mail pour envoyer une notification de sauvegarde réussie, mais une mise à jour récente de cette extension avait introduit une vérification de configuration SMTP défaillante qui retournait false prématurément, avant que WordPress n’ait eu la chance de transmettre le courriel du formulaire de contact au serveur mail.

Sans Query Monitor, cette investigation aurait demandé d’ajouter manuellement des instructions de journalisation dans le cœur de WordPress ou dans le plugin de formulaire, une pratique risquée et bien plus lente.

Le correctif et sa validation

Le correctif final n’a pas nécessité de modifier le code de l’extension de sauvegarde elle-même : une simple mise à jour vers la version suivante, publiée entre-temps par l’éditeur pour corriger précisément ce bug de vérification SMTP, a suffi. La leçon la plus utile de cet incident n’était donc pas technique, mais méthodologique : sans la bisection et Query Monitor, l’équipe aurait probablement suspecté en premier lieu le plugin de formulaire de contact lui-même, à tort.

Un conflit entre extensions se manifeste presque toujours loin de sa cause réelle. Ne partez jamais du principe que le symptôme désigne le coupable : c’est la méthode d’élimination qui le désigne, pas l’intuition.

Prévention pour la suite

Depuis cet incident, l’équipe applique une règle simple avant toute installation groupée d’extensions : les installer une par une, avec un test fonctionnel rapide des parcours critiques du site (ici, l’envoi du formulaire de contact) après chaque ajout, plutôt que d’installer plusieurs extensions d’affilée puis de découvrir un dysfonctionnement plusieurs jours après, quand le nombre de suspects potentiels a déjà grossi.

En résumé

Isoler un conflit entre extensions ne demande ni de deviner ni de lire l’intégralité du code source : le mode de dépannage de Health Check permet de tester sans impacter les visiteurs, la bisection réduit rapidement le nombre de suspects, et Query Monitor révèle le mécanisme exact du conflit une fois le coupable identifié. Cette méthode, reproduite depuis sur plusieurs autres sites, transforme un débogage qui pourrait durer des jours en une investigation de quelques dizaines de minutes.

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