Une cliente qui gère un site de recettes de cuisine me demandait pourquoi, dans le bloc Image, elle ne pouvait choisir qu’entre « Miniature », « Moyenne », « Grande » et « Taille complète ». Le thème déclarait pourtant une taille recette-carre de 600 par 600 pixels, pensée justement pour les vignettes de recette. Le thème avait bien enregistré la taille avec add_image_size(), mais sans la rendre visible dans l’interface.
Cette étape supplémentaire, trop souvent oubliée, tient en un seul filtre : image_size_names_choose.
Rappel : déclarer une taille ne suffit pas
La fonction add_image_size() crée bien le fichier physique lors de l’import ou de la régénération, mais elle ne l’ajoute pas au menu déroulant que voient les rédacteurs. Ce menu est peuplé séparément par le filtre image_size_names_choose, qui attend un tableau associatif slug => libellé.
add_action( 'after_setup_theme', function () {
add_image_size( 'recette-carre', 600, 600, true );
} );
add_filter( 'image_size_names_choose', function ( $tailles ) {
$tailles['recette-carre'] = __( 'Carré recette (600×600)', 'mon-theme' );
return $tailles;
} );
Où ce menu apparaît
Le filtre alimente à la fois le sélecteur de taille du bloc Image dans l’éditeur, la boîte de dialogue d’insertion de média classique, et l’attribut de taille disponible dans le widget Galerie. Une fois le filtre en place, la taille personnalisée apparaît immédiatement, sans régénération nécessaire pour la voir dans le menu (la régénération ne sert qu’à générer les fichiers).

Choisir un libellé utile
Le piège classique est de recopier le nom technique du slug comme libellé : un rédacteur ne sait pas ce que signifie recette-carre-600. Un bon libellé indique l’usage plutôt que les dimensions brutes, ou combine les deux :
Vignette article (400×300)plutôt quevignette_article.Bannière page d'accueil (1600×500)plutôt quebanniere_home.- Éviter les libellés trop longs : au-delà d’une trentaine de caractères, le menu déroulant tronque l’affichage sur certains navigateurs.
Retirer les tailles inutiles du menu
Le même filtre permet aussi de nettoyer le menu des tailles historiques que plus personne n’utilise, en les retirant du tableau plutôt qu’en les ajoutant :
add_filter( 'image_size_names_choose', function ( $tailles ) {
unset( $tailles['medium_large'] );
return $tailles;
} );
Attention toutefois : retirer une taille du menu ne supprime pas les fichiers déjà générés à cette taille, ni les usages codés en dur dans le thème via the_post_thumbnail( 'medium_large' ).
Cas des tailles enregistrées par une extension
Certaines extensions (WooCommerce en tête) déclarent leurs propres tailles d’image et gèrent parfois elles-mêmes leur affichage dans le menu. Avant d’ajouter une taille en double, une vérification rapide avec wp eval 'print_r( wp_get_registered_image_subsizes() );' en ligne de commande WP-CLI liste toutes les tailles déjà connues du site.
| Situation | Action |
|---|---|
| Taille déclarée mais absente du menu | Ajouter via image_size_names_choose |
| Taille historique inutilisée | Retirer du menu, garder la déclaration si des images l’utilisent encore |
| Taille dupliquée avec une extension | Vérifier avec wp_get_registered_image_subsizes() |
Une taille d’image qui n’apparaît pas dans le menu du bloc Image n’est pas un bug de WordPress : c’est simplement une étape de configuration oubliée par l’intégrateur.
En résumé
Trois lignes de filtre suffisent à transformer une taille d’image invisible en option claire pour les rédacteurs. C’est un des réglages les plus rentables en temps passé : quelques minutes d’intégration évitent des dizaines de messages de rédacteurs qui ne comprennent pas pourquoi leur image ne s’affiche pas comme prévu.