Afficher la miniature uniquement si la taille demandée existe

10

Lorsque j'utilise les fonctions qui obtiennent et affichent la miniature du message, elles afficheront la miniature demandée dans la taille que vous spécifiez, mais si cette taille n'existe pas, elles afficheront la miniature dans la taille d'origine et forceront le navigateur à la redimensionner.

Comment puis-je les forcer à afficher un espace réservé comme "pas d'image" dans le cas où la taille demandée n'existe pas?

Alex
la source
1
Parlez-vous de tailles de vignettes enregistrées ou essayez-vous d'obtenir une taille arbitraire non enregistrée en pixels? Exemple de code s'il vous plaît?
Rarst
sur les tailles enregistrées
Alex

Réponses:

2

En supposant que la question concerne wp_get_attachment_image_src.
Cela pourrait être aussi wp_get_attachment_link, mais, bien que connexe, cette analyse ne l'inclut pas.


J'ai pris connaissance de ce problème en répondant à cette question: Comment puis-je afficher toutes les vignettes générées par WP dans Media Manager? .
Référez-vous-y pour voir un code de travail concernant le problème sur cette question .

Et cela a conduit à ce sujet de forum WordPress .


La fonction wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) renvoie un tableau contenant:

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

Si [3]est faux, les originaldonnées d'image sont renvoyées.


Les deux wp_get_attachment_image_src et wp_get_attachment_links'appuient sur la fonction image_downsize, à l'intérieur /wp-includes/media.php.
Et c'est là que ce tableau de 4 éléments est renvoyé.

brasofilo
la source
1

Je ne suis pas sûr de cela, 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 à la question directement, mais vous pouvez utiliser un plugin appelé AJAX Thumbnail Rebuild - Ce plugin vous permet de recréer les miniatures des articles. Utile si vous ajoutez_image_size () après avoir déjà téléchargé les miniatures des articles.

Bainternet
la source
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 la wp_get_attachment_image_srclecture du Codex.

savoir
la source
0

Cela semble être une meilleure façon. Utilisez la variable globale $ _wp_additional_image_sizes, elle stocke toutes les images_size 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 
  }
Mathias
la source
0

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 regardez à travers.

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

de: http://codex.wordpress.org/Function_Reference/has_post_thumbnail
J'utilise quelque chose comme ça 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.

Thompson
la source