# Miniatures générées à la volée : désactiver les tailles WordPress inutilisées

> Un thème hérité génère encore huit tailles d'image par upload alors que trois suffisent. Comment désactiver les tailles inutiles et gagner du disque et du temps.

- Auteur : Clément Hadrot
- Publié le : 2021-02-15
- Mis à jour le : 2021-02-15
- Catégorie : Performance
- URL : https://wpmoderne.dev.wordpress-developpement.fr/performance/miniatures-tailles-inutilisees-desactiver/

## L’essentiel

- WordPress génère par défaut plusieurs tailles à chaque envoi d'image
- Un thème hérité peut en ajouter cinq ou six de plus, souvent sans usage réel
- Le filtre intermediate_image_sizes_advanced retire celles qui ne servent pas

En reprenant la maintenance d'un site vitrine pour une chaîne de magasins de bricolage, la première chose qui saute aux yeux dans la médiathèque, c'est la taille du dossier `uploads` : plus de 40 Go pour un site qui ne compte pourtant que quelques centaines d'articles illustrés. L'explication tient en un chiffre : chaque image envoyée génère huit fichiers différents, alors que l'inspection du thème actif révèle que trois tailles seulement sont réellement utilisées dans les templates.

Ce genre de dérive s'installe progressivement, refonte après refonte, sans que personne ne pense à nettoyer les déclarations de tailles d'image héritées des versions précédentes du thème. Le correctif est simple une fois le diagnostic posé, mais il demande de la rigueur pour ne rien casser côté affichage.

## Recenser les tailles réellement enregistrées

WordPress enregistre par défaut quatre tailles : `thumbnail`, `medium`, `medium_large` et `large`, en plus de l'image originale. Le thème examiné ici en ajoutait cinq supplémentaires via `add_image_size()`, dont deux correspondaient à d'anciennes maquettes de page d'accueil abandonnées depuis deux refontes. La commande WP-CLI suivante permet de lister toutes les tailles enregistrées sur l'installation :

```
wp eval 'global $_wp_additional_image_sizes; print_r( $_wp_additional_image_sizes );'
```

Croiser cette liste avec une recherche de `the_post_thumbnail(` et `wp_get_attachment_image(` dans les fichiers du thème a permis d'identifier lesquelles de ces tailles étaient effectivement appelées quelque part dans le code.

## Désactiver les tailles inutilisées à la source

Le filtre `intermediate_image_sizes_advanced` permet de retirer des tailles de la liste utilisée lors de la génération des miniatures, sans toucher à la déclaration elle-même dans le thème, ce qui évite de casser un appel existant à une taille encore utilisée ailleurs :

```
add_filter( 'intermediate_image_sizes_advanced', function ( $tailles ) {
    unset( $tailles['ancien-hero-accueil'] );
    unset( $tailles['ancien-bandeau-categorie'] );
    unset( $tailles['medium_large'] );
    return $tailles;
} );
```

> L'essentiel à retenir : WordPress génère par défaut plusieurs tailles à chaque envoi d'image ; Un thème hérité peut en ajouter cinq ou six de plus, souvent sans usage réel ; Le filtre intermediate_image_sizes_advanced retire celles qui ne servent pas

## Régénérer sans dupliquer l'historique

Ce filtre n'agit que sur les futurs envois d'images. Pour les images déjà présentes, deux choix étaient possibles : laisser les anciennes tailles orphelines en place, en acceptant qu'elles occupent de l'espace disque sans être régénérées, ou passer par la commande WP-CLI `regenerate` fournie par une extension dédiée pour reconstruire proprement la médiathèque. Sur ce projet, la deuxième option a été retenue, avec une commande limitée aux tailles concernées pour éviter un traitement trop long sur plusieurs milliers d'images :

```
wp media regenerate --only-missing --image_size=thumbnail,medium,large
```

Un point de vigilance : la commande `regenerate` ne supprime pas d'elle-même les anciens fichiers devenus orphelins après retrait d'une taille. Un script de nettoyage complémentaire a parcouru le dossier `uploads` à la recherche de fichiers dont le suffixe de dimension ne correspondait plus à aucune taille enregistrée.

## Les gains mesurés

- Réduction d'environ 35 % de l'espace disque occupé par la médiathèque après nettoyage des anciennes tailles orphelines.
- Temps de traitement d'un envoi d'image en médiathèque réduit d'environ 40 %, la génération de miniatures étant l'étape la plus coûteuse en CPU lors d'un import en masse.
- Sauvegardes du site plus rapides et moins volumineuses, un bénéfice secondaire apprécié par l'équipe d'exploitation.

## Ce qu'il faut vérifier avant de généraliser cette approche

Avant de retirer une taille d'image sur un site en production, il est indispensable de vérifier qu'aucune extension tierce ne l'utilise en arrière-plan, notamment pour générer des vignettes dans des courriels automatiques ou des flux RSS personnalisés. Sur ce projet, une extension d'export de flux marchand s'appuyait justement sur une taille que l'équipe s'apprêtait à supprimer, ce qui a été repéré à temps grâce à une recherche exhaustive dans le code avant application du filtre en production.

## Pour aller plus loin

Ce nettoyage ne traite volontairement pas la question du format des images elles-mêmes : les fichiers restaient au format JPEG classique, une conversion vers un format plus compact étant un chantier distinct mené séparément. Réduire le nombre de tailles générées reste néanmoins une action à faible risque et à effet immédiat, à envisager systématiquement lors d'un audit de performance d'un site WordPress ancien.
