Affiche la vignette uniquement si la taille demandée existe

10

Lorsque j'utilise les fonctions qui permettent d'extraire et de générer la miniature de publication, elles affichent la miniature demandée dans la taille spécifiée, mais si cette taille n'existe pas, elles affichent la miniature dans sa taille d'origine et forcent le navigateur à: redimensionnez-le.

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?

    
posée Alex 27.01.2011 - 05:38

7 réponses

2

En supposant que la question porte sur wp_get_attachment_image_src .
Il pourrait également s'agir de wp_get_attachment_link , mais cette analyse, bien que connexe, ne l'inclut pas.

A pris connaissance de ce problème répondant à cette question: Comment afficher toutes les vignettes générées par WP dans Media Manager? .
Consultez-le pour voir un code fonctionnel concernant le problème sur cette question .

Et cela a conduit à ce sujet du forum WordPress .

La fonction wp_get_attachment_image_src ($ attachment_id, $ taille, $ icône) renvoie un tableau contenant:

.
[0] => url  
[1] => width  
[2] => height  
[3] => is intermediate

Si [3] est false, 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é.

    
réponse donnée brasofilo 04.07.2012 - 04:11
1

Je ne suis pas sûr à ce sujet mais je sais que vous pouvez utiliser la fonction getimagesize () de PHP quelque chose 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 directe à la question, mais vous pouvez utiliser un plugin appelé AJAX Thumbnail Rebuild - Ce plugin vous permet de reconstruire les vignettes de publication. Utile si vous ajoutez add_image_size () après avoir déjà téléchargé les vignettes de publication.

    
réponse donnée Bainternet 27.01.2011 - 09:53
1

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.

    
réponse donnée trewknowledge 28.12.2011 - 19:57
0

Il existe un plugin qui créera automatiquement la taille de l'image s'il n'existe pas. enlace

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 au noyau WP, peut-être dans la version 3.2 enlace

    
réponse donnée Thompson 27.01.2011 - 21:15
0

Cela semble être un meilleur moyen. Utilisez la variable globale $ _wp_additional_image_sizes, elle stocke 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 
  }
    
réponse donnée Mathias 24.09.2013 - 11:43
0

La meilleure approche consiste à utiliser la fonction "get_intermediate_image_sizes" intégrée à Wordpress pour renvoyer la liste complète des tailles d'image sous forme de tableau, puis à parcourir celui-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] ) . '" />';
}
    
réponse donnée Charles Jaimet 22.11.2016 - 15:25
-1

Peut-être que cela aidera

<?php 
//This must be in a loop
if(has_post_thumbnail()) {
    the_post_thumbnail();
} else {
    echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
?>

à partir de: enlace
J'utilise quelque chose comme ceci pour vérifier si la taille de l'image existe:

if (function_exists('has_post_thumbnail') && has_post_thumbnail('medium')) {
//// code to display thumbnail goes here
}
else {
/// otherwise do this
}

J'espère que cela vous aidera à démarrer.

    
réponse donnée Thompson 05.02.2011 - 23:33

Lire d'autres questions sur les étiquettes