WP_Query et débogage SQL : afficher et corriger une requête WordPress

Vous développez avec WordPress et vous vous retrouvez bloqué sur une requête SQL générée par WP_Query ? Voici comment l’afficher, l’analyser dans Sequel Pro.

Développement WordPress

Comment afficher la requête SQL d’une instance WP_Query

Quand on travaille sur des projets WordPress complexes — qu’il s’agisse d’un site vitrine sur mesure ou d’une application web métier — il arrive régulièrement de devoir inspecter les requêtes SQL générées en coulisses par WordPress. C’est indispensable pour déboguer un affichage de posts inattendu, optimiser les performances ou comprendre ce que WordPress fait réellement de vos arguments.

Pour récupérer la requête SQL brute d’une instance WP_Query, une seule ligne suffit :

$customPosts = new WP_Query($yourArgs);
echo "Dernière requête SQL : {$customPosts->request}";

Vous obtenez ainsi la requête complète telle qu’elle est transmise à la base de données — prête à être analysée ou testée directement dans votre client SQL.

Débogage SQL

L’erreur only_full_group_by dans Sequel Pro : cause et solution

Si vous copiez cette requête dans la fenêtre Requête de Sequel Pro pour l’exécuter manuellement, vous pouvez rencontrer l’erreur suivante :

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains
nonaggregated column 'pvpj.wp_postmeta.meta_value' which is not functionally
dependent on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by

Cette erreur est liée au mode SQL only_full_group_by, activé par défaut dans les versions récentes de MySQL et MariaDB. Ce mode strict impose des règles sur les clauses GROUP BY que WordPress ne respecte pas toujours dans ses requêtes générées dynamiquement.

La solution est simple : désactiver ce mode pour la session en cours avant d’exécuter votre requête. Dans la fenêtre Requête de Sequel Pro, tapez la ligne suivante et exécutez-la avec Cmd + R :

SET SESSION sql_mode="NO_ENGINE_SUBSTITUTION";

Votre requête WordPress s’exécutera ensuite sans erreur.

Bon à savoir

Une astuce valable sur tous vos environnements de développement

Cette manipulation s’applique uniquement à la session active de Sequel Pro — elle ne modifie pas la configuration globale de votre serveur MySQL ou MariaDB. C’est donc une solution propre, sans effet de bord, que vous pouvez utiliser en toute sérénité en environnement de développement local.

Sur un VPS en production sous MariaDB — comme ceux que nous configurons chez Deefuse — nous déconseillons de désactiver ce mode globalement, qui joue un rôle dans l’intégrité des données. Pour un usage en local, en revanche, cette commande vous fera gagner un temps précieux.

Deefuse agency