axe, wood, chop

Débugger WordPress comme un Pro : Guide Pratique 🔍

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

  1. âś… Activer WP_DEBUG
  2. âś… Installer Query Monitor
  3. ✅ Vérifier le fichier debug.log
  4. ✅ Désactiver les plugins un par un
  5. ✅ Passer temporairement sur un thème par défaut
  6. ✅ Vérifier les conflits de versions PHP/WordPress

🎓 Pro Tips

  1. Garde toujours une copie des fichiers ou de la base avant de jouer au détective
  2. Les erreurs 500 se cachent souvent dans les .htaccess
  3. Un wp_mail() qui ne marche pas ? Installe un plugin SMTP pour dĂ©bugger
  4. 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 !

Samy Kantari - Expert WordPress + IA

Kantari Samy

Expert WordPress + IA

👨‍💻 10 ans dans le game WordPress, chez Whodunit, à bricoler du code, à dompter des bugs et à faire tourner des projets de toutes tailles.
Puis l’IA est arrivée… et là, révélation 💡 !
J’ai switché de mindset, réinventé ma façon de coder et avec le vibe coding : une nouvelle ère où je ne suis plus limité par le temps ni par les outils.

Aujourd’hui ? Je code toujours… Mais avec mon copilote IA.
On forme une team de choc. Lui, c’est la puissance. Moi, c’est la vision. Ensemble, on déverrouille ce qui semblait impossible hier. 🚀

10+ Années d'expérience
+++ Projets réalisés
80% code par IA
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires