Miniaturansicht nur anzeigen, wenn die angeforderte Größe vorhanden ist

10

Wenn ich die Funktionen verwende, mit denen das Post-Thumbnail abgerufen und ausgegeben wird, wird das angeforderte Thumbnail in der von Ihnen angegebenen Größe angezeigt. Wenn diese Größe jedoch nicht vorhanden ist, wird das Thumbnail in der Originalgröße angezeigt und der Browser wird gezwungen, die Größe zu ändern.

Wie kann ich sie zwingen, einen Platzhalter wie "kein Bild" anzuzeigen, falls die angeforderte Größe nicht vorhanden ist?

Alex
quelle
1
Sprechen Sie über registrierte Miniaturbildgrößen oder versuchen Sie, eine beliebige nicht registrierte Größe in Pixel zu erhalten? Codebeispiel bitte?
Rarst
über die registrierten Größen
Alex

Antworten:

2

Angenommen, die Frage geht um wp_get_attachment_image_src.
Es könnte auch darum gehen wp_get_attachment_link, aber obwohl verwandt, beinhaltet diese Analyse es nicht.


Bei der Beantwortung dieser Frage wurde mir dieses Problem bewusst : Wie kann ich alle von WP generierten Miniaturansichten in Media Manager anzeigen? .
Lesen Sie den Arbeitscode zu dem Problem in dieser Frage .

Und es führte zu diesem WordPress-Forum-Thema .


Die Funktion wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) gibt ein Array zurück, das Folgendes enthält:

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

Wenn [3]false, werden die originalBilddaten zurückgegeben.


Beides wp_get_attachment_image_src und wp_get_attachment_linkverlassen sich auf die Funktion image_downsizeim Inneren /wp-includes/media.php.
Und hier wird dieses Array mit 4 Elementen zurückgegeben.

brasofilo
quelle
1

Ich bin mir nicht sicher, aber ich weiß, dass Sie die getimagesize () -Funktion von php wie folgt verwenden können:

//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" />';
}

und ich weiß, dass es keine direkte Antwort auf die Frage ist, aber Sie können ein Plugin namens AJAX Thumbnail Rebuild verwenden - Mit diesem Plugin können Sie die Post-Thumbnails neu erstellen. Nützlich, wenn Sie_image_size () hinzufügen, nachdem Sie bereits Post-Thumbnails hochgeladen haben.

Bainternet
quelle
1

So konnte ich eine Miniaturansicht nur anzeigen, wenn eine angeforderte Größe vorhanden war:

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

Um mehr darüber zu erfahren, wp_get_attachment_image_srclesen Sie den Codex.

Wissen
quelle
0

Es scheint ein besserer Weg zu sein. Verwenden Sie die globale Variable $ _wp_additional_image_sizes. Sie speichert alle registrierten image_size. Wenn Sie also überprüfen möchten, ob ein Bildgrößenname definiert ist:

  global $_wp_additional_image_sizes;
  if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
  {
    //your code here
  }
  else
  {
    //default code here 
  }
Mathias
quelle
0

Der beste Ansatz besteht darin, die in Wordpress integrierte Funktion "get_intermediate_image_sizes" zu verwenden, um die vollständige Liste der Bildgrößen als Array zurückzugeben und diese dann durchzusehen.

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
quelle
-1

Vielleicht hilft das

<?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" />';
}
?>

von: http://codex.wordpress.org/Function_Reference/has_post_thumbnail
Ich verwende so etwas, um zu überprüfen, ob die Bildgröße vorhanden ist:

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

Hoffe, es hilft dir, loszulegen.

Thompson
quelle