web-dev-qa-db-fra.com

Afficher la vignette uniquement si la taille demandée existe

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?

10
Alex

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é.

2
brasofilo

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.

1
trewknowledge

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.

1
Bainternet

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 
  }
0
Mathias

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] ) . '" />';
}
0
Charles Jaimet

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

0
Thompson