Allons soyons francs : Qui utilise vraiment les thèmes de base proposés par WordPress ?
Si leur présence assure au néophyte la possibilité de commencer rapidement à créer du contenu sans avoir à s'aventurer dans les méandres des catalogues de thèmes WordPress en ligne, ils ne présentent en réalité que peu d'intérêt pratique.
Ils présentent en outre l'avantage d'appliquer en pratique les dernières évolutions apportées au CMS, nouvelles fonctionnalités et directives, déprécations, qui sont très souvent subtiles, non-visibles au premier coup d'oeil et pourraient bien finir ignorées à jamais. Les parcourir lors de leur sortie est donc une idée intéressante dans une optique de veille.
Le problème : A chaque mise à jour, WordPress installe son nouveau thème phare sans nous poser de question, et celui-ci ne tarde pas à se voir commité dans le repo principal.
Ma solution a longtemps été d'exclure dans le fichier .gitignore
tous les thèmes de ce type existants et à venir :
wp-content/themes/twentyfourteen
wp-content/themes/twentyfifteen
wp-content/themes/twentysixteen
wp-content/themes/twentyseventeen
wp-content/themes/twentyeighteen
wp-content/themes/twentynineteen
wp-content/themes/twentytwenty
wp-content/themes/twentytwentyone
Ainsi les thèmes avaient beau s'installer, ils restaient dans mon environnement local et finissaient par être supprimés par mes soins au détour d'une navigation. Le problème, sans être résolu, était sous contrôle.
Oui mais... Je n'avais pas prévu suffisamment loin dans les évolutions, et le temps suivant inexorablement son cours, des versions que je n'avais pas anticipé se sont à nouveau retrouvées installées dans mon projet.
Adepte de solutions radicales mais néanmoins élégantes, nous nous sommes penchés sur la question et avons trouvé cette solution que nous implémentons désormais pour nos client et dont nous vous partageons la teneur.
Notre réponse élégante : un MU-Plugin pour bloquer et supprimer les thèmes de base de WordPress
Pour un environnement propre et maîtrisé, rien ne vaut une intervention "en amont" : empêchons carrément WordPress d’installer ces thèmes indésirables.
Pourquoi un MU-Plugin est la meilleure option
- Chargement systématique avant tous les plugins standards
- Immuable : impossible de le désactiver par accident
- Intégration native via les hooks du core
Etape 1 : Blocage à l’installation
<?php
/**
* Plugin Name: Disable Default Themes
* Description: Bloque et supprime automatiquement tout thème dont le slug commence par "twenty".
*/
add_action('upgrader_post_install', function($installed, $hook_extra, $result) {
if (
isset($hook_extra['type'], $hook_extra['theme'])
&& $hook_extra['type'] === 'theme'
&& preg_match('#^twenty#i', $hook_extra['theme'])
) {
global $wp_filesystem;
$theme_dir = WP_CONTENT_DIR . '/themes/' . $hook_extra['theme'];
$wp_filesystem->rmdir($theme_dir, true);
}
return $installed;
}, 10, 3);
Etape 2 : Préemptif => On filtre le téléchargement
<?php
add_filter('upgrader_pre_download', function($reply, $package, $upgrader) {
if (
isset($upgrader->skin->type, $upgrader->skin->theme)
&& $upgrader->skin->type === 'theme'
&& preg_match('#^twenty#i', $upgrader->skin->theme)
) {
return new WP_Error(
'theme_blocked',
sprintf('Installation du thème "%s" bloquée par Disable Default Themes.', $upgrader->skin->theme)
);
}
return $reply;
}, 10, 3);
Etape 3 : Tests et validation
- Videz le cache et les transients (si nécessaire)
- Lancez une mise à jour de WordPress
- Vérifiez que plus aucun dossier twenty* n’apparaît
Bénéfices et perspectives
Dépôts allégés et process fiables
Votre CI/CD gagne en rapidité, vos merges sont plus sûrs, et vos builds n’incorporent plus de code inattendu.
Conclusion : reprenez la main sur vos environnements WordPress
Dans un contexte où chaque minute de maintenance compte, cette approche par MU-Plugin vous offre une solution robuste, élégante et pérenne. Fini le nettoyage manuel à chaque mise à jour : gardez votre stack légère, maîtrisez vos dépôts et concentrez-vous sur la valeur métier.