Lorsque j'utilise les fonctions qui obtiennent et sortent la vignette de publication, elles affichent la vignette demandée dans la taille que vous spécifiez, mais si cette taille n'existe pas, elles affichent la vignette dans sa taille d'origine et obligent le navigateur à la redimensionner.
Comment puis-je les forcer à afficher un espace réservé tel que "pas d'image" au cas où la taille demandée n'existe pas?
En supposant que la question concerne wp_get_attachment_image_src
.
Il pourrait également s'agir de wp_get_attachment_link
, mais, bien que liée, cette analyse ne l'inclut pas.
Tenez-vous informé de ce problème répondant à cette question: Comment puis-je afficher toutes les vignettes générées WP dans Media Manager? .
Consultez-le pour voir un code de travail concernant le problème sur cette question.
Et cela a conduit à ce sujet Sujet du forum WordPress .
La fonction wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) retourne un tableau contenant:
[0] => url
[1] => width
[2] => height
[3] => is intermediate
Si [3]
est faux, les données d'image original
sont renvoyées.
Les deux wp_get_attachment_image_src
et wp_get_attachment_link
dépendent de la fonction image_downsize
, à l'intérieur de /wp-includes/media.php
.
Et c’est là que ce tableau de 4 éléments est renvoyé.
Voici comment j'ai pu afficher une vignette uniquement s'il existe une taille demandée:
if ( has_post_thumbnail() ) {
$imgdata = wp_get_attachment_image_src( get_post_thumbnail_id(), 'thumbnail' ); //change thumbnail to whatever size you are using
$imgwidth = $imgdata[1]; // thumbnail's width
$wanted_width = 300; //change this to your liking
if ( ($imgwidth < $wanted_width ) ) {
the_post_thumbnail();
} else {
//do whatever you want
}
}
Pour en savoir plus sur wp_get_attachment_image_src
, lisez le Codex.
Je ne suis pas sûr de cela, mais je sais que vous pouvez utiliser la fonction getimagesize () de PHP comme ceci:
//This must be in one loop
if(has_post_thumbnail()) {
$wanted_width = 300;
$wanted_height = 150;
$id = get_post_thumbnail_id()
$image = wp_get_attachment_image_src($id);
if ($image){
list($width, $height) = getimagesize($image[0]);
if (($wanted_height = $width) && ($wanted_height = $height)){
the_post_thumbnail();
}
else{
//default when no image
echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
}
else{
//default when no image
echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
} else {
//default when no image
echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
et je sais que ce n'est pas une réponse à la question directement mais vous pouvez utiliser un plugin appelé AJAX Thumbnail Rebuild - Ce plugin vous permet de reconstruire les miniatures des publications. Utile si vous ajoutez add_image_size () après avoir déjà téléchargé les vignettes de publication.
Cela semble être un meilleur moyen. Utilisez la variable globale $ _wp_additional_image_sizes, qui stockera toutes les images enregistrées. Donc, si vous voulez vérifier si un nom de taille d'image est défini:
global $_wp_additional_image_sizes;
if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
{
//your code here
}
else
{
//default code here
}
La meilleure approche consiste à utiliser la fonction intégrée "get_intermediate_image_sizes" de Wordpress pour renvoyer la liste complète des tailles d'image sous forme de tableau, puis à parcourir celle-ci.
show_image_by_size( 10470, 'custom_size' );
function show_image_by_size( $_post_id, $_desired_size ) {
$_sizes = get_intermediate_image_sizes();
$_thumbnail_id = get_post_thumbnail_id( $_post_id );
$_image_size = ( in_array( $_desired_size , $_sizes ) ) ? $_desired_size : 'full';
$image = wp_get_attachment_image_src( $_thumbnail_id, $_image_size );
echo '<img src="' . esc_url( $image[0] ) . '" />';
}
Il existe un plugin qui créera automatiquement la taille de l'image si elle n'existe pas. http://austinmatzko.com/wordpress-plugins/filosofo-custom-image-sizes/
Je n'ai pas encore eu besoin d'utiliser ce plugin moi-même. Mais ça vaut le coup. Il est question d'ajouter des fonctionnalités similaires à WP core, peut-être dans 3.2 http://core.trac.wordpress.org/ticket/15311