Salut jeune padawan ! Tu galères avec un bug WordPress qui te donne des sueurs froides ? Pas de panique, je vais te montrer comment devenir un véritable Sherlock Holmes du debugging WordPress !
🎯 Première étape : Configurer ton labo de debug
Commence par transformer ton wp-config.php en véritable centre de commandement :
// Active le mode détective 🕵️‍
define('WP_DEBUG', true);
// Note tout dans un fichier
define('WP_DEBUG_LOG', true);
// Affiche à l'écran (à éviter en prod !)
define('WP_DEBUG_DISPLAY', true);
// Désactive le min des scripts
define('SCRIPT_DEBUG', true);
🔍 Les outils indispensables de l’enquĂŞteur
1. Query Monitor – Ton meilleur alliĂ©
C’est comme avoir une camĂ©ra de surveillance sur ton WordPress. Il te montre :
- Les requĂŞtes SQL suspectes
- Les hooks qui traînent
- Les templates chargés
- Les temps de chargement
2. Le journal de bord personnalisé
function super_debug($message, $data = null) {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
$trace = debug_backtrace()[0];
$log_entry = sprintf(
"[%s] %s:%d - %s",
date('Y-m-d H:i:s'),
basename($trace['file']),
$trace['line'],
$message
);
if ($data) {
$log_entry .= "\n" . print_r($data, true);
}
error_log($log_entry . "\n", 3, WP_CONTENT_DIR . '/debug.log');
}
}
// Utilisation
super_debug("L'utilisateur fait des bĂŞtises", $_POST);
Pense Ă regarder la doc error_log đź‘˝
🕵️‍♂️ Techniques d’investigation avancĂ©es
1. Espionner les hooks WordPress
function hook_detective($hook_name) {
add_action($hook_name, function() use ($hook_name) {
super_debug("🎣 Hook déclenché : " . $hook_name, [
'args' => func_get_args(),
'time' => microtime(true)
]);
}, 0);
}
// Surveillance des suspects habituels
hook_detective('init');
hook_detective('wp_loaded');
hook_detective('wp_footer');
Pour debug les filtres, c’est une autre histoire … Tu peux tenter
add_action(
'shutdown',
function () {
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
return;
}
global $wp_actions, $wp_filter;
echo '<pre>' . print_r( $wp_filter, true ) . '</pre>';
die();
},
999
);
Si tu essaies de tout logger d’un coup, tu risques de te prendre un beau « Fatal error: Allowed memory size » dans la figure (Cette structure est beaucoup plus complexe et volumineuse). L’idĂ©al c’est de boucler dessus $wp_filter et de print + die juste ce que tu as besoin.
En comparaison : $wp_actions est ton ami ! C’est une structure simple qui contient juste les noms des hooks et leur nombre d’exĂ©cutions. Tu peux le dĂ©bugger sans crainte.
2. Traquer les requĂŞtes SQL louches
/**
* Debug les requĂŞtes SQL lentes sans impacter les performances
* Utilise SAVEQUERIES et un seuil de temps configurable
*/
function better_db_detective() {
// Vérifie si on est en mode debug et si SAVEQUERIES est activé
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
return;
}
if ( ! defined( 'SAVEQUERIES' ) || ! SAVEQUERIES ) {
return;
}
// On attend la fin de l'exécution pour analyser
add_action(
'shutdown',
function () {
global $wpdb;
// Seuil de temps en secondes (ici 1 seconde)
$threshold = 1;
// Analyse uniquement si $wpdb->queries existe
if ( ! empty( $wpdb->queries ) ) {
foreach ( $wpdb->queries as $query ) {
// $query[1] contient le temps d'exécution
if ( $query[1] > $threshold ) {
super_debug(
sprintf(
"[RequĂŞte lente] Temps: %fs\nRequĂŞte: %s\nCaller: %s\n",
$query[1],
$query[0],
$query[2]
)
);
}
}
}
},
999
);
}
🎯 Les scènes de crime courantes
1. Le mystère du template disparu
/**
* Log les fichiers PHP inclus dans WordPress, groupés par catégorie
*/
function log_included_files() {
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
return;
}
$files = array(
'wp-admin' => array(),
'wp-includes' => array(),
'wp-content' => array(
'themes' => array(),
'plugins' => array(),
'other' => array(),
),
'root' => array(),
);
foreach ( get_included_files() as $file ) {
$path = str_replace( ABSPATH, '', $file );
if ( strpos( $path, 'wp-admin/' ) === 0 ) {
$files['wp-admin'][] = $path;
} elseif ( strpos( $path, 'wp-includes/' ) === 0 ) {
$files['wp-includes'][] = $path;
} elseif ( strpos( $path, 'wp-content/' ) === 0 ) {
if ( strpos( $path, 'wp-content/themes/' ) === 0 ) {
$files['wp-content']['themes'][] = $path;
} elseif ( strpos( $path, 'wp-content/plugins/' ) === 0 ) {
$files['wp-content']['plugins'][] = $path;
} else {
$files['wp-content']['other'][] = $path;
}
} else {
$files['root'][] = $path;
}
}
super_debug( 'WordPress Files Loaded', $files );
}
add_action( 'shutdown', 'log_included_files', 999 );
2. L’Ă©nigme des assets manquants
function assets_detective() {
global $wp_scripts, $wp_styles;
super_debug(
'📚 Assets chargés',
array(
'scripts' => array_keys( $wp_scripts->registered ),
'styles' => array_keys( $wp_styles->registered ),
)
);
}
add_action( 'wp_print_scripts', 'assets_detective', 999 );
❓Priorité 999
C’est tout con, un prioritĂ© basse pour arriver en dernier. On attend que tout s’Ă©xĂ©cute pour intervenir ensuite.
⚠️ Hey Padawan, la prioritĂ© basse c’est comme les roues stabilisatrices : parfait pour dĂ©bugger, mais danger en prod ! Remets des prioritĂ©s classiques et surtout, protège ce code avec des constantes de debug – parce qu’un ninja ne laisse pas traĂ®ner ses outils d’entraĂ®nement en mission ! 🥷
📝 La checklist du parfait détective
- âś… Activer WP_DEBUG
- âś… Installer Query Monitor
- ✅ Vérifier le fichier debug.log
- ✅ Désactiver les plugins un par un
- ✅ Passer temporairement sur un thème par défaut
- ✅ Vérifier les conflits de versions PHP/WordPress
🎓 Pro Tips
- Garde toujours une copie des fichiers ou de la base avant de jouer au détective
- Les erreurs 500 se cachent souvent dans les .htaccess
- Un wp_mail() qui ne marche pas ? Installe un plugin SMTP pour débugger
- Les problèmes de performance ? Active Query Monitor et SAVEQUERIES
🚀 Pour aller plus loin
- Apprends Ă utiliser xDebug avec WordPress
- Explore le débogueur de navigateur pour les problèmes JavaScript
- Mets en place un environnement de développement local avec MailHog
đź’ˇ Le mot de la fin
Le debugging WordPress, c’est comme une enquĂŞte policière : patience, mĂ©thode et un bon outillage font toute la diffĂ©rence.
N’oublie pas que mĂŞme les meilleurs dĂ©tectives demandent parfois de l’aide !

