Le studio de photographie Lumen souhaitait un thème sur mesure avec une architecture de code proche de ce que l’équipe pratiquait déjà sur ses projets Laravel côté applicatif. Sage 10, sorti l’année précédente, correspondait exactement à ce besoin : il introduit Acorn, un pont entre WordPress et le conteneur de services de Laravel, et remplace l’ancien build Webpack par Bud, plus simple à configurer. Ce tutoriel couvre l’installation complète et les deux ou trois pièges de déploiement rencontrés en production.
Ce texte ne compare pas Sage aux autres starter themes du marché ; il se concentre sur sa mise en pratique concrète, pour qui a déjà choisi cette voie.
Installation et structure du projet
Sage 10 s’installe via Composer, à la différence des versions précédentes qui reposaient sur un simple générateur Yeoman :
composer create-project roots/sage studio-lumen
cd studio-lumen
npm install
npm run build
La structure qui en résulte diffère sensiblement d’un thème classique : les vues vivent dans resources/views/, les contrôleurs optionnels dans app/, et le point d’entrée du thème reste functions.php, mais réduit à sa portion congrue puisque l’essentiel de la logique passe désormais par Acorn.
Acorn : le conteneur de services Laravel appliqué à WordPress

Acorn adapte plusieurs briques de Laravel — le conteneur d’injection de dépendances, les service providers, le système de configuration — au contexte de WordPress. Un service provider dédié aux menus du thème, par exemple, s’enregistre comme dans une application Laravel classique :
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ThemeServiceProvider extends ServiceProvider {
public function boot() {
register_nav_menus( array(
'primary' => __( 'Menu principal', 'sage' ),
'footer' => __( 'Menu du pied de page', 'sage' ),
) );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'title-tag' );
}
}
Ce provider est ensuite déclaré dans config/app.php, aux côtés des autres fournisseurs de services du thème. L’intérêt principal de cette organisation : chaque aspect du thème (menus, images, blocs personnalisés) vit dans son propre provider, plutôt que dans un unique functions.php qui grossit indéfiniment.
Blade : des vues sans balises PHP à rallonge
Les templates s’écrivent en Blade, avec héritage de gabarits natif, ce qui réduit fortement la duplication par rapport à des get_header() et get_footer() répétés dans chaque fichier :
{{-- resources/views/single.blade.php --}}
@extends('layouts.app')
@section('content')
@while(have_posts()) @php(the_post())
<article>
<h1>{{ get_the_title() }}</h1>
{!! get_the_content() !!}
</article>
@endwhile
@endsection
La directive {!! !!}, à la différence de {{ }}, n’échappe pas automatiquement le HTML — indispensable pour get_the_content(), qui contient déjà du balisage, mais à réserver strictement à des sorties dont on maîtrise l’origine, jamais à une saisie utilisateur non filtrée.
Bud : un build sans configuration Webpack manuelle
Sage 10 remplace l’ancien système de build basé sur Webpack directement configuré par Bud, une surcouche qui expose une API plus simple pour les besoins courants d’un thème : compilation Sass, bundling JavaScript, gestion des assets. Le fichier bud.config.js reste volontairement court pour un projet standard :
export default async (bud) => {
bud
.entry('app', ['scripts/app.js', 'styles/app.scss'])
.entry('editor', ['styles/editor.scss']);
};
Les pièges de déploiement rencontrés
- Chemin des assets compilés : Acorn s’attend à trouver un manifeste des fichiers compilés dans
public/build/. Oublier de déployer ce dossier, souvent exclu par erreur d’un.gitignorecopié depuis un projet Laravel classique, casse le chargement des styles sans message d’erreur explicite. - Cache de configuration : Acorn met en cache la configuration du thème en production, comme le ferait Laravel. Une modification de
config/app.phpnon suivie d’un vidage de ce cache reste invisible tant qu’on ne le sait pas. - Version de PHP côté hébergement : Acorn et ses dépendances Laravel exigent une version de PHP plus récente que celle parfois encore active par défaut chez certains hébergeurs mutualisés, ce qui a nécessité une vérification préalable avant le premier déploiement.
Un thème Sage bien construit se maintient plus vite qu’un thème classique équivalent, à condition que toute l’équipe partage déjà une base solide en Laravel ; sans cette base, chaque ligne de code devient un obstacle à expliquer.
En résumé
Sage 10, Acorn et Bud forment un ensemble cohérent pour une équipe déjà à l’aise avec l’écosystème Laravel, avec un vrai gain de structure sur les projets de taille moyenne à grande. Les trois pièges de déploiement identifiés ici — assets compilés absents, cache de configuration, version de PHP insuffisante — couvrent la quasi-totalité des incidents rencontrés lors des premières mises en production du studio avec cette stack.