Qu’est-ce que wp-includes de WordPress ? Utilité et fonctionnement

Par Xavier Deloffre

Parmi les nombreux répertoires que l’on retrouve dans une installation WordPress, le dossier wp-includes est l’un des plus critiques pour le bon fonctionnement du cœur du CMS. Invisible pour l’utilisateur final, ce dossier regroupe l’ossature technique du système WordPress : fonctions globales, API internes, classes système, gestion du contenu et compatibilité PHP. Autrement dit, il constitue le socle sur lequel repose toute l’architecture du CMS. Dans cet article, voyons ensemble en détail ce que contient wp-includes, son rôle précis, et les précautions à respecter lors de sa manipulation.

Wp-includes : Un répertoire cœur du noyau WordPress

Le dossier wp-includes est l’un des trois répertoires racines d’une installation WordPress (voir également notre sujet sur les fichiers racines de WP), aux côtés de wp-admin (interface d’administration) et wp-content (contenus personnalisés). Introduit dès les premières versions publiques de WordPress, ce répertoire est entièrement dédié au fonctionnement interne du CMS. Il constitue en quelque sorte le « moteur » invisible qui exécute toutes les fonctions centrales de WordPress : affichage du contenu, gestion des utilisateurs, traitement des requêtes HTTP, rendu HTML, etc. À la différence de wp-content qui est destiné à accueillir vos développements personnalisés (thèmes, plugins, uploads), le dossier wp-includes est considéré comme une zone réservée au noyau, c’est-à-dire aux fichiers que WordPress charge automatiquement pour faire tourner la plateforme. C’est également dans ce répertoire que résident les définitions de classes majeures comme WP_Query, WP_Error, WP_Theme, ou encore les composants de la REST API, les shortcodes natifs et les bibliothèques embarquées comme PHPMailer ou Requests. Historiquement, le contenu de wp-includes s’est enrichi à chaque version majeure de WordPress. À ses débuts (WordPress 0.7 en 2003), il ne contenait qu’un ensemble limité de fichiers pour le rendu des pages. Mais dès la version 2.0 (2005), avec l’introduction de l’objet WP_Query et la séparation plus nette entre logique métier et affichage, ce répertoire a évolué pour accueillir des APIs internes de plus en plus sophistiquées. Aujourd’hui, il contient plus de 200 fichiers PHP, des bibliothèques tierces, des classes natives, ainsi que des fichiers JS et CSS embarqués dans l’interface publique ou back-office.

Voici une vue d’ensemble de quelques fichiers importants présents dans wp-includes :

Fichier Fonction principale
functions.php Contient les fonctions globales utilisées par le CMS (ex. : is_user_logged_in(), wp_redirect()).
pluggable.php Définit des fonctions remplaçables (login, mail, etc.) si elles ne sont pas déjà déclarées ailleurs.
general-template.php Fournit les fonctions pour afficher le titre du site, les menus, les liens, les catégories…
class-wp-query.php Définit la classe WP_Query qui exécute les requêtes SQL pour charger les contenus (articles, pages, CPT…).
taxonomy.php Gère les taxonomies comme les catégories, étiquettes, ou tout type de classification personnalisée.
media.php Contient les fonctions liées au traitement des fichiers médias : images, vidéos, fichiers PDF, etc.
script-loader.php Permet l’enregistrement et le chargement conditionnel des scripts JS et CSS du cœur et des extensions.
load.php Initialise les constantes globales et gère le chargement progressif des fonctions selon le contexte.

À cela s’ajoutent de nombreuses autres ressources : classes AJAX, API REST (via rest-api), gestion des transients, gestion des sessions, localisation via les fichiers de traduction (internationalisation), ou encore les formats RSS/Atom (fichiers feed-*.php).

Toute modification manuelle de fichiers dans wp-includes est déconseillée, car ces fichiers sont remplacés automatiquement lors d’une mise à jour de WordPress. Pour toute personnalisation, utilisez des fonctions hookées dans un thème enfant ou via un plugin.

Comment fonctionne wp-includes et que contient-il réellement ?

Lorsqu’un site WordPress est exécuté, une séquence précise de fichiers est appelée pour initialiser l’environnement PHP. Parmi ces fichiers, le dossier wp-includes joue un rôle fondamental. C’est dans le fichier wp-settings.php, situé à la racine de WordPress, que débute l’inclusion de la majorité des composants de ce répertoire. Ce chargement est effectué à l’aide de la fonction require_once afin d’éviter les redéfinitions de fonctions et de garantir que chaque fichier ne soit intégré qu’une seule fois.

Le chargement du contenu de wp-includes s’effectue par étapes successives

Lorsqu’un visiteur accède à une page d’un site WordPress, c’est le fichier index.php à la racine du projet qui est sollicité. Celui-ci appelle wp-blog-header.php, lequel charge à son tour wp-load.php. C’est dans ce fichier que le cœur de WordPress est véritablement initialisé via require_once( ABSPATH . 'wp-settings.php' ). Et c’est ici que wp-includes entre en action, car la majorité des fichiers qu’il contient sont appelés via ce script central. Voici un décryptage détaillé des étapes clés du processus :

1. Définition des constantes

Le premier fichier inclus est wp-includes/version.php. Il définit :

  • WPINC : la constante qui représente le nom du dossier wp-includes, utilisée pour simplifier les inclusions ultérieures.
  • $wp_version : la version exacte de WordPress utilisée par l’installation.
  • $wp_db_version, $tinymce_version, $required_php_version : des constantes système qui permettent à WordPress de vérifier la compatibilité lors des mises à jour, ou d’exposer les bonnes ressources JS/CSS.

Ce fichier sert également de point de référence pour les outils de diagnostic et les scripts d’upgrade (comme update-core.php).

2. Compatibilité avec différentes versions de PHP

Le fichier wp-includes/compat.php est ensuite chargé pour assurer le bon fonctionnement du CMS, même sur des environnements PHP anciens. Il contient des polyfills — des fonctions de substitution — pour les fonctions natives manquantes. Parmi celles-ci :

  • hash_equals() : pour comparer des chaînes de manière sécurisée (anti-timing attack).
  • array_column() : fonction PHP 5.5 utilisée pour extraire une colonne spécifique d’un tableau multidimensionnel.
  • json_encode() / json_decode() : si non présentes, elles sont simulées.

Ce mécanisme de compatibilité permet à WordPress de fonctionner sur une large gamme d’environnements, notamment les hébergements mutualisés encore basés sur des versions anciennes de PHP.

3. Chargement des fonctions globales

WordPress charge ensuite des fichiers contenant les fonctions globales essentielles à tous les niveaux du CMS. Parmi les plus importants :

  • functions.php : c’est ici que l’on retrouve des fonctions comme wp_die(), is_ssl(), ou wp_safe_redirect().
  • formatting.php : traite la mise en forme du texte via wpautop(), sanitize_title(), ou remove_accents().
  • link-template.php : gère les URLs générées par WordPress comme les permaliens, liens vers les auteurs, catégories, taxonomies personnalisées, etc.
  • query.php : prépare les requêtes SQL selon le contexte de la page (page d’accueil, recherche, archive, single post…)

Ces fichiers définissent des fonctions purement procédurales, qui sont ensuite appelées par les templates de thème, les plugins ou même par le cœur de WordPress dans des contextes divers.

4. Initialisation des classes centrales

À ce stade, WordPress initialise ses principales classes objets, qui structurent son fonctionnement interne :

  • class-wp-query.php : crée l’objet $wp_query, utilisé dans la boucle WordPress pour exécuter et manipuler les requêtes aux bases de données ;
  • user.php : fournit les classes et fonctions associées à WP_User, pour la gestion des sessions, permissions et rôles utilisateurs ;
  • post.php : contient les définitions de WP_Post et toutes les fonctions associées à la gestion des contenus (post status, post meta, slug, etc.).
  • theme.php et class-wp-theme.php : chargent les informations relatives aux thèmes installés ou actifs.

Ces objets sont indispensables au fonctionnement du CMS et interagissent avec la base de données via la classe wpdb (chargée via wpdb.php), qui sert d’interface sécurisée et générique aux requêtes SQL.

5. Initialisation du système de hooks

Enfin, WordPress prépare son système d’extensions internes à l’aide de deux fichiers clés :

  • plugin.php : introduit les fonctions add_action(), add_filter(), do_action() et apply_filters(). Ces fonctions permettent aux plugins et thèmes d’injecter ou de modifier des comportements sans altérer le noyau.
  • class-wp-hook.php : gère la structure objet des hooks avec priorités, arguments dynamiques, et ordonnancement d’exécution.

Ce système d’événements constitue l’épine dorsale de la modularité WordPress. Il est utilisé aussi bien par le cœur du CMS que par les extensions et les thèmes, garantissant une architecture découplée et extensible.

Ces étapes permettent à WordPress d’être à la fois robuste, modulaire et extensible. En comprenant ce séquencement, les développeurs peuvent mieux diagnostiquer les erreurs de chargement, comprendre la hiérarchie des fichiers et optimiser la compatibilité de leurs thèmes ou plugins avec le cœur de WordPress.

Les principales familles de fichiers de wp-includes

Pour mieux comprendre la structure du répertoire wp-includes, voici un tableau détaillé regroupant ses grandes familles de fichiers et leur rôle fonctionnel au sein du noyau WordPress :

Famille de fichiers Rôle et fichiers clés
Fichiers de compatibilité compat.php, version.php assurent le bon fonctionnement du CMS sur des environnements PHP variés.
Ils contiennent des polyfills (fonctions de secours) et définissent des constantes critiques comme WPINC ou $wp_version.
Fonctions globales functions.php regroupe des fonctions d’utilité générale (wp_die(), is_ssl()).
formatting.php applique les règles de mise en forme du contenu : wpautop(), sanitize_title(), etc.
Classes système class-wp-query.php gère les requêtes de contenu dans la boucle WordPress.
class-wp-widget.php définit la base technique des widgets personnalisables utilisés dans les sidebars.
Filtres et hooks plugin.php et class-wp-hook.php structurent le système d’événements du CMS.
Ils permettent d’utiliser add_action(), add_filter(), do_action(), pour personnaliser ou étendre les comportements sans modifier le noyau.
APIs internes rewrite.php construit et gère les structures de permaliens.
taxonomy.php manipule les catégories, étiquettes, et taxonomies personnalisées.
media.php orchestre l’import, la génération et l’accès aux fichiers médias (images, vidéos, documents).

Modularité et chargement conditionnel

WordPress n’inclut pas tous les fichiers de wp-includes de manière statique. Il utilise une stratégie de chargement conditionnel pour optimiser les performances. Par exemple :

  • Les fichiers de la REST API, comme rest-api.php ou class-wp-rest-server.php, ne sont chargés que lorsque l’URL cible le point d’entrée /wp-json/.
  • feed-rss2.php et consorts ne sont sollicités que lors de la consultation d’un flux RSS ou Atom.
  • Les fichiers liés à l’éditeur (comme class-wp-editor.php ou editor.js) sont activés uniquement dans le contexte du back-office.

La boucle WordPress et les fonctions de rendu

L’un des éléments les plus emblématiques de WordPress, la boucle ou the loop, repose presque entièrement sur des composants issus de wp-includes. La classe WP_Query (définie dans class-wp-query.php) exécute les requêtes SQL. Ensuite, les fonctions have_posts(), the_post(), the_title() ou the_content() sont définies dans des fichiers comme query.php et general-template.php. C’est également ici que se gèrent les shortcodes (shortcodes.php), les transients (système de cache temporaire via option.php) et les composants de l’HTTP API, qui permettent à WordPress de communiquer avec des services tiers via wp_remote_get() ou wp_remote_post().

Un moteur PHP modulaire mais centralisé

Le design de wp-includes repose sur un principe de centralisation du cœur métier : tous les fichiers critiques sont regroupés dans ce répertoire pour simplifier la maintenance et les mises à jour du noyau. Depuis WordPress 5.x, on observe une meilleure séparation des responsabilités grâce à l’introduction de classes spécifiques (ex. : class-wp-block-parser.php pour les blocs Gutenberg) et l’ajout de répertoires dédiés comme blocks/, customize/, ou theme.json pour les réglages globaux de thème. Chaque nouvelle version de WordPress apporte son lot de fichiers dans wp-includes, renforçant progressivement l’architecture modulaire tout en garantissant une rétrocompatibilité avec les anciennes fonctions. C’est ce qui explique pourquoi WordPress peut rester à jour tout en continuant à exécuter des sites créés il y a plus de 10 ans.

Comment sécuriser le dossier wp-includes de WordPress ?

Le dossier wp-includes contient les fichiers centraux du noyau WordPress. En raison de sa nature sensible et non modifiable, il est souvent ciblé par des attaques cherchant à exploiter des vulnérabilités connues, injecter du code malveillant ou obtenir un accès non autorisé aux fonctions internes du CMS. Il est donc essentiel de sécuriser ce répertoire pour garantir la stabilité, la confidentialité et la résilience de votre site WordPress.

Limiter l’accès direct aux fichiers PHP de wp-includes

Par défaut, certains fichiers du répertoire wp-includes ne doivent jamais être appelés directement par un utilisateur via le navigateur. Pour renforcer la sécurité, vous pouvez bloquer les accès directs aux fichiers PHP de ce dossier en ajoutant une règle dans le fichier .htaccess à la racine de votre site (valable si vous utilisez Apache) :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-includes/.*\.php$ - [F,L]
</IfModule>

Cette règle empêche l’exécution de tout fichier PHP situé dans wp-includes lorsqu’il est directement ciblé dans l’URL. Les fichiers seront cependant toujours accessibles en interne par WordPress.

Empêcher la navigation dans le répertoire

Pour éviter que des utilisateurs ne puissent voir la liste des fichiers du répertoire wp-includes (si l’indexation de dossier est activée sur votre serveur), il est fortement recommandé de désactiver l’indexation via la directive suivante dans le htaccess de WP :

Options -Indexes

Cette instruction empêche les navigateurs d’afficher l’arborescence des fichiers dans un dossier web s’il n’existe pas de fichier index.php ou index.html.

Bloquer l’accès aux fichiers sensibles via le serveur

Certains fichiers comme class-wp-hook.php ou rewrite.php contiennent des fonctions critiques utilisées par WordPress. Pour renforcer la sécurité côté serveur, vous pouvez appliquer des règles spécifiques dans votre configuration Apache ou NGINX pour interdire l’accès à tous les fichiers de wp-includes en dehors des scripts autorisés par WordPress.

Voici un exemple Apache (à insérer dans un .htaccess) :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-includes/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^wp-includes/.*$ - [F,L]
</IfModule>

Utiliser un plugin de sécurité pour surveiller le dossier

Des plugins comme Wordfence, iThemes Security ou Sucuri permettent d’ajouter une couche de protection applicative en surveillant les modifications non autorisées dans wp-includes. Ces outils peuvent :

  • Vérifier l’intégrité des fichiers système via checksums officiels.
  • Bloquer l’exécution de code malicieux ou l’inclusion de fichiers suspects.
  • Restaurer automatiquement un fichier corrompu avec la version d’origine de WordPress.

Mettre à jour régulièrement WordPress

Enfin, la meilleure des protections reste de maintenir votre installation à jour. Chaque version de WordPress corrige des failles potentielles, notamment dans les fichiers de wp-includes. Utilisez la fonctionnalité de mises à jour automatiques ou planifiez des mises à jour manuelles avec une stratégie de sauvegarde régulière. La sécurité du répertoire wp-includes repose donc sur un principe simple : ne jamais y toucher manuellement, bloquer son exécution publique et surveiller ses changements. Ces bonnes pratiques renforcent la solidité de votre installation WordPress face aux menaces les plus courantes.

Xavier Deloffre

Xavier Deloffre

Fondateur de Facem Web, agence implantée à Arras et à Lille (Hauts-de-France), je suis spécialiste du Web Marketing, formateur expérimenté, et blogueur reconnu dans le domaine du Growth Hacking. Passionné par le référencement naturel (SEO) que j'ai découvert en 2009, j'imagine et développe des outils web innovants afin d'optimiser la visibilité de mes clients dans les SERPs. Mon objectif principal : renforcer leur notoriété en ligne par des stratégies digitales efficaces et créatives.

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Besoin de visibilité ?

☑️ Experts du référencement

☑️ + de 12 ans d’éxpérience

☑️ + 500 clients satisfaits

☑️ Création de sites

☑️ Audit SEO

☑️ Conseil SEO

☑️ Référencement de sites

☑️ Devis gratuit