vendredi 25 septembre 2026

À propos

Contact

Outils & workflow

Bedrock et Composer : notre structure de projet WordPress, deux ans après

On a basculé nos projets sur Bedrock il y a deux ans. Voici ce qui a vraiment changé, ce qui reste pénible, et ce qu'on referait différemment.

Par Clément Hadrot • 17 juin 2020 • 4 min de lecture • Aucun commentaire
Bedrock et Composer : notre structure de projet WordPress, deux ans après

Il y a deux ans, on a pris la décision de faire basculer nos nouveaux projets sur Bedrock, le squelette de projet WordPress maintenu par l’équipe de Roots. L’idée de départ était simple : arrêter de gérer WordPress comme un CMS à part et le traiter comme n’importe quel projet PHP moderne, avec Composer pour les dépendances et une structure de dossiers plus proche des standards de l’écosystème PHP.

Deux ans et une dizaine de projets plus tard, le bilan est largement positif, mais pas sans grincements. Voici ce qu’on a vraiment gagné, et ce qui continue de demander un effort d’adaptation à chaque nouvelle recrue.

Ce que Bedrock change concrètement

La structure de dossiers est la première différence visible. WordPress n’est plus à la racine du projet, mais dans un sous-dossier web/wp, entièrement géré par Composer : on ne le touche jamais à la main, on ne le versionne pas, une simple mise à jour du fichier composer.json suffit.

{
  "require": {
    "php": ">=7.1",
    "composer/installers": "^1.9",
    "roots/wordpress": "5.4.2",
    "roots/wp-config": "1.0.0",
    "roots/bedrock-autoloader": "1.0.4",
    "vlucas/phpdotenv": "^3.6.6"
  }
}

Les plugins suivent la même logique, via le dépôt WPackagist qui miroite l’intégralité du répertoire officiel de WordPress.org sous forme de paquets Composer :

composer require wpackagist-plugin/advanced-custom-fields
composer require wpackagist-theme/twentytwenty

La fin de wp-config.php en dur

Bedrock remplace le classique wp-config.php rempli de constantes par un fichier .env non versionné, lu grâce à phpdotenv. Chaque environnement (local, staging, production) a son propre fichier, jamais commité :

DB_NAME=nom_de_la_base
DB_USER=utilisateur
DB_PASSWORD=mot_de_passe
WP_ENV=development
WP_HOME=http://site.local
WP_SITEURL=${WP_HOME}/wp
L'essentiel à retenir : Dépendances gérées comme n'importe quel projet PHP moderne ; wp-config.php remplacé par des variables d'environnement ; Une vraie courbe d'apprentissage pour l'équipe

C’est un vrai confort : plus aucun risque de commiter un mot de passe de production par erreur, et le passage d’un environnement à l’autre se résume à changer de fichier .env. On perd en revanche l’habitude, très ancrée chez beaucoup de développeurs WordPress, de tout retrouver dans un seul fichier familier.

Ce qui reste pénible

La courbe d’apprentissage

Pour un développeur venu du WordPress « classique », Bedrock demande un vrai temps d’adaptation : comprendre Composer, accepter de ne plus toucher au dossier wp, apprendre à structurer un fichier .env par environnement. Sur les deux stagiaires qu’on a formés depuis, il a fallu compter une bonne semaine avant l’aisance complète.

Les plugins premium sans miroir Composer

Tous les plugins n’ont pas d’équivalent WPackagist, en particulier les extensions premium (ACF Pro, certains plugins de e-commerce). Il faut alors soit les déclarer via un dépôt privé dans composer.json, soit les gérer hors Composer — ce qui casse un peu la cohérence de l’approche.

{
  "repositories": [
    {
      "type": "composer",
      "url": "https://connect.advancedcustomfields.com"
    }
  ]
}

L’impact sur le déploiement

Le vrai bénéfice, au quotidien, se voit au déploiement. Plus besoin de synchroniser manuellement des dossiers de plugins : un composer install --no-dev --optimize-autoloader sur le serveur (ou en amont, dans un pipeline) reconstruit l’environnement exact décrit par composer.lock. C’est reproductible, versionné, et ça élimine la fameuse question « quelle version du plugin tourne réellement en prod ? ».

  • Le fichier composer.lock versionné garantit que tous les environnements utilisent exactement les mêmes versions
  • Un simple composer install reconstruit l’intégralité de l’installation WordPress et des plugins
  • Les montées de version majeures de WordPress se testent d’abord en local via composer update roots/wordpress

Sur un projet Bedrock, la question « pourquoi ce plugin est activé en prod mais pas en local » n’existe quasiment plus. C’est peut-être le gain le plus sous-estimé de cette approche.

Est-ce fait pour tous les projets ?

Honnêtement, non. Pour un site vitrine simple, sans équipe technique derrière pour le maintenir, la structure classique de WordPress reste plus accessible — n’importe quel hébergeur mutualisé la comprend nativement, et n’importe quel développeur WordPress peut reprendre le projet sans formation. Bedrock prend tout son sens sur des projets suivis dans la durée, avec une équipe technique stable et un besoin réel de reproductibilité entre environnements.

En résumé

Deux ans après notre bascule, on ne reviendrait pas en arrière sur nos projets d’agence suivis dans la durée. Bedrock impose une discipline qui paraît lourde au début, mais qui élimine une bonne partie des incidents de déploiement liés à des divergences entre environnements. Le vrai coût, ce n’est pas la technique, c’est la formation de l’équipe — à prévoir avant de se lancer, pas après.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi