Lister les tailles des images disponibles : Pour les devs

Lister les tailles des images disponibles : Pour les devs

Dans WordPress, il existe nativement 3 tailles d’images nommées « thumbnail« , « medium« , et « large« . Vous avez la possibilité d’en ajouter via du code avec la fonction add_image_size() ou via un plugin comme Simple Image Sizes de mon ami @Raherian.

MAIS je n’ai pas trouvé de fonction permettant de me retourner le liste de ces tailles, avec leur nom, taille et information sur le cropping ou non.

L’existant

Il existe bien la fonction get_intermediate_image_sizes() mais elle ne retourne que les noms des tailles ! Je l’aurais plutôt appelée get_intermediate_image_sizes_names()

Il existe aussi la variable globale $_wp_additional_image_sizes mais elle ne retourne que les tailles d’images ajoutés et non les natives.

En fait, les natives sont des options, il y a 7 options qui sont 3 fois width et height + 1 pour le crop de la thumbnail. Greg me dit que si on crée les options de crop pour medium et large, ça fonctionne !

Ma façon

J’ai alors récemment créé une petite fonction sympa qui permets de récupérer le détail des tailles des images disponibles sur votre installation, voire une taille précise :

function get_image_sizes( $size = '' ) {

global $_wp_additional_image_sizes;
$sizes = array();
$get_intermediate_image_sizes = get_intermediate_image_sizes();
foreach( $get_intermediate_image_sizes as $_size ) {
if ( in_array( $_size, array( 'thumbnail', 'medium', 'large' ) ) ) {
$sizes[ $_size ]['width'] = (int) get_option( $_size . '_size_w' );
$sizes[ $_size ]['height'] = (int) get_option( $_size . '_size_h' );
$sizes[ $_size ]['crop'] = (bool) get_option( $_size . '_crop' );
} elseif ( isset( $_wp_additional_image_sizes[ $_size ] ) ) {
$sizes[ $_size ] = array( 'width' => $_wp_additional_image_sizes[ $_size ]['width'],
'height' => $_wp_additional_image_sizes[ $_size ]['height'],
'crop' => $_wp_additional_image_sizes[ $_size ]['crop'] );
}
}
if ( $size ) {
if( isset( $sizes[ $size ] ) ) {
return $sizes[ $size ];
} else {
return false;
}
}
return $sizes;
}

Démo

var_dump( get_image_sizes() );

/*
array(4) {
["thumbnail"]=>
array(3) {
["width"]=>
int(150)
["height"]=>
int(150)
["crop"]=>
bool(true)
}
["medium"]=>
array(3) {
["width"]=>
int(300)
["height"]=>
int(300)
["crop"]=>
bool(false)
}
["large"]=>
array(3) {
["width"]=>
int(1024)
["height"]=>
int(1024)
["crop"]=>
bool(false)
}
["juliobox-size"]=>
array(3) {
["width"]=>
int(211)
["height"]=>
int(279)
["crop"]=>
bool(false)
}
}
*/
var_dump( get_image_sizes( 'large' ) );
/*
array(3) {
["width"]=>
int(1024)
["height"]=>
int(1024)
["crop"]=>
bool(false)
}
*/
var_dump( get_image_sizes( 'foo-bar' ) );
/*
bool(false)
*/

Pourquoi WordPress n’a pas ça ? Car il n’en a pas besoin, moi si, et vous ?

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum