Skip to Content

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-loadwp-configwp-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 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) vs false = charger WordPress sans rendre (utile pour un endpoint custom ou un contexte headless).


2. Le déroulé, étape par étape

  1. Bootstrap : wp-load.php trouve et charge wp-config.php (base, constantes), puis wp-settings.php.
  2. Chargement : wp-settings.php initialise le cœur, charge tous les plugins actifs, puis le thème (functions.php). C’est là que votre code est « branché ».
  3. init : un hook majeur — le moment où l’on enregistre types de contenu, taxonomies, shortcodes, etc. (tout est prêt, l’utilisateur est connu).
  4. Résolution de l’URL : WordPress traduit l’URL en query vars (via les rewrite rules) et construit la requête principale (main query).
  5. Exécution de la main query : un WP_Query récupère les contenus correspondants (l’article, la liste, la page…).
  6. template_redirect : dernier moment pour rediriger ou court-circuiter avant le rendu du thème.
  7. Choix du gabarit (template hierarchy, ch. 5.4) : quel fichier de template afficher.
  8. La Boucle (ch. 5.3) : le gabarit parcourt les résultats et affiche le contenu ; wp_head/wp_footer injectent scripts et styles.
  9. Rendu : le HTML part au navigateur.

3. Les grands hooks à connaître (repères)

HookQuandOn y fait typiquement…
plugins_loadedTous les plugins chargésInitialisations qui dépendent d’autres plugins.
initCœur prêt, user connuEnregistrer CPT, taxonomies, shortcodes, démarrer une session.
wp_enqueue_scriptsAvant rendu frontCharger CSS/JS du thème/plugin (Partie 6).
wpMain query résolueAgir en connaissant le contexte de la page.
template_redirectAvant le templateRediriger, gérer un accès, un endpoint.
wp_head / wp_footerDans <head> / avant </body>Injecter balises, scripts (le thème doit les appeler).
admin_init / admin_menuCôté back-officeRé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

  1. À quel hook enregistre-t-on un Custom Post Type, et pourquoi pas plus tôt ?
  2. Qu’est-ce que la « requête principale » et en quoi diffère-t-elle d’un new WP_Query() que vous créez ?
  3. Vous voulez charger un fichier CSS uniquement sur le front. Quel hook utilisez-vous ?

✅ Solution

  1. 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.
  2. 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.
  3. wp_enqueue_scripts (le hook d’enqueue côté front) ; en admin on utiliserait admin_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.