Chapitre 4.5 — Débogage : WP_DEBUG, logs & Xdebug
⏱️ TL;DR — Déboguer WordPress, c’est d’abord voir les erreurs : activez
WP_DEBUG+WP_DEBUG_LOGpour les écrire danswp-content/debug.log. Ajoutez Query Monitor (un plugin) pour inspecter requêtes SQL, hooks, appels HTTP et perf. Pour le pas-à-pas, branchez Xdebug à votre IDE. Enfin, gardez le réflexe « purger les caches » quand un changement « ne s’applique pas ». Un bon setup de débogage transforme un « écran blanc » angoissant en message d’erreur précis.
🎯 Objectifs
- Activer et exploiter les logs de débogage.
- Utiliser Query Monitor pour l’inspection runtime.
- Mettre en place Xdebug (pas-à-pas) avec l’IDE.
- Diagnostiquer l’« écran blanc de la mort » (WSOD).
1. Voir les erreurs (le socle)
Dans wp-config.php (ch. 4.2), en développement :
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // → wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // ne pas casser l'affichage : on lit le log
define( 'SCRIPT_DEBUG', true ); // assets non minifiésPuis, dans votre code, écrivez dans le log :
error_log( 'Valeur de $data : ' . print_r( $data, true ) );Et suivez le fichier en direct :
tail -f wp-content/debug.log # (ou via WP-CLI / l'outil de votre env local)⚠️ Piège — En production,
WP_DEBUG_DISPLAYdoit resterfalse(ouWP_DEBUGdésactivé) : afficher les erreurs PHP aux visiteurs fuit des chemins de fichiers et des indices d’attaque. En dev, on logue (WP_DEBUG_LOG) plutôt que d’afficher, pour ne pas casser la mise en page pendant qu’on travaille.
2. Query Monitor : le tableau de bord du dev
Query Monitor est un plugin incontournable. Une fois activé, il ajoute une barre d’outils qui détaille, pour chaque page :
- les requêtes SQL (nombre, durée, les plus lentes, les doublons) ;
- les hooks déclenchés et les callbacks attachés ;
- les appels HTTP sortants (API externes) ;
- les erreurs PHP et notices ;
- le temps et la mémoire consommés ;
- l’objet
WP_Queryde la page, les templates chargés, les capabilities vérifiées.
💡 Pour un dev React — Query Monitor, c’est vos DevTools pour WordPress : l’onglet « Network » (requêtes SQL/HTTP), un profileur (temps/mémoire), et une vue des hooks (comme un arbre de composants/événements). C’est l’outil n°1 pour comprendre ce que fait réellement une page — et repérer les requêtes N+1 (Partie 11, perf).
3. Xdebug : le pas-à-pas
Pour déboguer vraiment (points d’arrêt, inspection de variables, pile d’appels), on utilise Xdebug, l’extension de débogage de PHP, connectée à l’IDE (VS Code + extension PHP Debug, ou PhpStorm).
Étapes :
- Xdebug installé dans l’environnement (LocalWP l’inclut ;
wp-env/Docker : à activer dans l’image PHP). - Configurer l’IDE pour écouter (port 9003 par défaut) et mapper les chemins (path mappings).
- Poser un point d’arrêt, recharger la page → l’exécution s’arrête, vous inspectez
$variables, la stack, vous avancez pas à pas.
C’est incomparablement plus efficace que semer des error_log() partout pour un bug complexe.
📚 Aller plus loin — Avec
wp-env, on active Xdebug viawp-env start --xdebug=debuget on configure VS Code avec le bon path mapping (le code local ↔/var/www/html/wp-content/...dans le conteneur). Le mapping est l’étape qui coince le plus souvent : sans lui, l’IDE ne relie pas les points d’arrêt aux fichiers.
4. L’écran blanc de la mort (WSOD)
Une page totalement blanche = une erreur fatale PHP non affichée. Démarche :
- Activez
WP_DEBUG+WP_DEBUG_LOGet rechargez → lisezdebug.log(le message et le fichier/ligne fautifs). - Souvent : un plugin ou le thème incompatible (surtout après une mise à jour ou un passage PHP 8). WordPress a une protection contre les erreurs fatales qui met le site en « mode récupération » et envoie un e-mail à l’admin avec un lien pour désactiver le fautif.
- En dépannage : désactiver les plugins (via WP-CLI
wp plugin deactivate --all, ou en renommantwp-content/plugins), puis réactiver un par un pour isoler le coupable. - Vérifier la version de PHP (une syntaxe incompatible avec PHP 8 est fréquente).
5. Le réflexe « caches »
Comme dans beaucoup de CMS, un changement qui « ne s’applique pas » est souvent un cache : cache d’objets (Redis/Memcached), plugin de cache de pages, cache de l’opcode PHP (OPcache), ou cache navigateur. Réflexe : purger les caches (plugin de cache, wp cache flush, redémarrer PHP en dev) avant de conclure à un bug. On approfondit le cache en Partie 11 (perf).
✏️ Exercices
- Quelle combinaison de constantes permet de loguer les erreurs sans les afficher aux visiteurs ?
- Vous avez une page très lente : quel outil consultez-vous et que cherchez-vous en priorité ?
- Un site affiche un écran blanc après une mise à jour de plugins. Décrivez votre démarche.
✅ Solution
WP_DEBUG = true+WP_DEBUG_LOG = true+WP_DEBUG_DISPLAY = false: les erreurs vont danswp-content/debug.logsans s’afficher.- Query Monitor : regarder les requêtes SQL (nombre, requêtes lentes, doublons/N+1), le temps et la mémoire, et les appels HTTP externes bloquants.
- Activer
WP_DEBUG/WP_DEBUG_LOGet liredebug.log; utiliser le mode récupération (ouwp plugin deactivate --all) pour isoler le plugin fautif en réactivant un par un ; vérifier la version de PHP.
🧠 Quiz de révision
1. Où sont écrites les erreurs avec WP_DEBUG_LOG ?
Dans wp-content/debug.log.
2. À quoi sert Query Monitor ?
À inspecter, par page, les requêtes SQL, hooks, appels HTTP, erreurs, temps et mémoire — les DevTools de WordPress.
3. Qu’est-ce que Xdebug ?
L’extension de débogage pas-à-pas de PHP, connectée à l’IDE (points d’arrêt, inspection de variables, pile d’appels).
4. Que signale un écran blanc (WSOD) ?
Une erreur fatale PHP non affichée ; on l’identifie via debug.log et on isole le plugin/thème fautif.
5. Quel réflexe avoir quand un changement ne s’applique pas ?
Purger les caches (objet, pages, OPcache, navigateur) avant de conclure à un bug.
Chapitre suivant : La base de données & ses outils.