Chapitre 5.1 — Le cycle de requête
⏱️ TL;DR — Chaque page WordPress est produite par un déroulé précis : tout passe par
index.php, qui charge WordPress (wp-load→wp-config→wp-settings), lequel branche tous les plugins et le thème, analyse l’URL pour construire la requête principale (main query), l’exécute (WP_Query), choisit un gabarit (template hierarchy), déroule la Boucle et rend le HTML. À chaque étape, des hooks (init,wp,template_redirect,wp_head…) laissent votre code intervenir. Connaître ce déroulé, c’est savoir où placer son code.
🎯 Objectifs
- Suivre une requête, de l’URL au HTML rendu.
- Situer les grands hooks dans ce déroulé.
- Comprendre la notion de requête principale (main query).
- Savoir à quel moment WordPress est « prêt » pour telle ou telle action.
1. Le point d’entrée unique
Quelle que soit l’URL, tout passe par un seul fichier : index.php (grâce à la réécriture d’URL, ch. 5.9). Il n’y a pas un fichier PHP par page — c’est WordPress qui route en interne.
// index.php (racine) — simplifié
define( 'WP_USE_THEMES', true );
require __DIR__ . '/wp-blog-header.php'; // → charge WordPress puis rend la page💡 Pour un dev React — C’est un front controller : une seule entrée, un routeur interne qui décide quoi afficher. Exactement l’idée d’un
app/[[...slug]]attrape-tout, sauf que le routeur, la résolution de données et le rendu sont fournis par WordPress.WP_USE_THEMES= « rends une page HTML via le thème » (mode normal) vsfalse= charger WordPress sans rendre (utile pour un endpoint custom ou un contexte headless).
2. Le déroulé, étape par étape
- Bootstrap :
wp-load.phptrouve et chargewp-config.php(base, constantes), puiswp-settings.php. - Chargement :
wp-settings.phpinitialise le cœur, charge tous les plugins actifs, puis le thème (functions.php). C’est là que votre code est « branché ». init: un hook majeur — le moment où l’on enregistre types de contenu, taxonomies, shortcodes, etc. (tout est prêt, l’utilisateur est connu).- Résolution de l’URL : WordPress traduit l’URL en query vars (via les rewrite rules) et construit la requête principale (main query).
- Exécution de la main query : un
WP_Queryrécupère les contenus correspondants (l’article, la liste, la page…). template_redirect: dernier moment pour rediriger ou court-circuiter avant le rendu du thème.- Choix du gabarit (template hierarchy, ch. 5.4) : quel fichier de template afficher.
- La Boucle (ch. 5.3) : le gabarit parcourt les résultats et affiche le contenu ;
wp_head/wp_footerinjectent scripts et styles. - Rendu : le HTML part au navigateur.
3. Les grands hooks à connaître (repères)
| Hook | Quand | On y fait typiquement… |
|---|---|---|
plugins_loaded | Tous les plugins chargés | Initialisations qui dépendent d’autres plugins. |
init | Cœur prêt, user connu | Enregistrer CPT, taxonomies, shortcodes, démarrer une session. |
wp_enqueue_scripts | Avant rendu front | Charger CSS/JS du thème/plugin (Partie 6). |
wp | Main query résolue | Agir en connaissant le contexte de la page. |
template_redirect | Avant le template | Rediriger, gérer un accès, un endpoint. |
wp_head / wp_footer | Dans <head> / avant </body> | Injecter balises, scripts (le thème doit les appeler). |
admin_init / admin_menu | Côté back-office | Réglages, pages d’admin (Partie 7). |
Ne les mémorisez pas tous : retenez init (enregistrement) et wp_enqueue_scripts (assets), et surtout le principe : à chaque étape, un hook existe. Le catalogue est dans la doc et le code du cœur.
⚠️ Piège — agir trop tôt ou trop tard. Enregistrer un Custom Post Type avant
init(ex. au chargement du fichier) échoue ou casse ; le faire après (ex. dans le rendu) le rend invisible. De même, appeler des fonctions qui exigent l’utilisateur courant avant qu’il soit connu échoue. Le bon hook au bon moment est la moitié du métier — c’est le rôle du chapitre suivant.
4. La « requête principale » (main query)
WordPress construit une requête centrale à partir de l’URL : c’est la main query. Sur /mon-article/, la main query = « l’article dont le slug est mon-article ». Sur /category/actus/, = « les articles de la catégorie Actus ». Le thème l’affiche via la Boucle (ch. 5.3), sans avoir à la formuler lui-même.
Distinction importante : la main query (celle de la page) vs des requêtes secondaires que vous créez (new WP_Query(...) pour un widget « articles liés »). Modifier la main query se fait via un hook dédié (pre_get_posts), jamais en la remplaçant à la main dans le thème (ch. 5.5).
5. Contexte : front, admin, AJAX, REST, cron
Le même bootstrap sert plusieurs contextes, chacun avec ses hooks :
- Front (site public) : le déroulé ci-dessus.
- Admin (
wp-admin) :admin_init,admin_menu, pas de Boucle front. - AJAX (
admin-ajax.php) et REST API (/wp-json/…, Partie 9) : contextes sans thème, pour renvoyer des données. - WP-Cron (ch. 5.8) : exécution de tâches planifiées.
Savoir dans quel contexte tourne votre code évite des erreurs (ex. enqueue de CSS front inutile en admin). Des fonctions comme is_admin(), wp_doing_ajax(), wp_is_json_request() renseignent le contexte.
✏️ Exercices
- À quel hook enregistre-t-on un Custom Post Type, et pourquoi pas plus tôt ?
- Qu’est-ce que la « requête principale » et en quoi diffère-t-elle d’un
new WP_Query()que vous créez ? - Vous voulez charger un fichier CSS uniquement sur le front. Quel hook utilisez-vous ?
✅ Solution
- Sur
init: à ce moment le cœur est prêt et l’utilisateur connu. Plus tôt (au chargement du fichier), les API nécessaires ne sont pas toutes disponibles ; trop tard, le CPT n’est pas pris en compte pour la requête/rendu. - La main query est construite automatiquement à partir de l’URL (le contenu « de la page ») et affichée par la Boucle. Un
new WP_Query()est une requête secondaire que vous formulez (ex. « articles liés »), indépendante de l’URL. wp_enqueue_scripts(le hook d’enqueue côté front) ; en admin on utiliseraitadmin_enqueue_scripts.
🧠 Quiz de révision
1. Par quel fichier passe toute requête WordPress ?
index.php (front controller unique), grâce à la réécriture d’URL.
2. Que fait wp-settings.php ?
Il initialise le cœur, charge tous les plugins actifs puis le thème — c’est là que votre code est branché.
3. À quoi sert le hook init ?
C’est le moment où l’on enregistre CPT, taxonomies, shortcodes… (cœur prêt, utilisateur connu).
4. Qu’est-ce que la template hierarchy détermine ?
Quel fichier de gabarit sera utilisé pour rendre la page (ch. 5.4).
5. Comment modifier la requête principale proprement ?
Via le hook pre_get_posts, jamais en remplaçant la main query dans le thème (ch. 5.5).
Chapitre suivant : Hooks : actions & filtres.