Débugger WordPress comme un Pro : Guide Pratique 🔍

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 :

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

💡 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 !