仅当存在请求的大小时才显示缩略图

时间:2011-01-27 作者:Alex

当我使用获取和输出帖子缩略图的功能时,它们将以您指定的大小显示请求的缩略图,但如果不存在此大小,它们将以原始大小显示缩略图,并强制浏览器调整其大小。

如果请求的大小不存在,我如何强制他们显示类似“无图像”的占位符?

7 个回复
SO网友:brasofilo

Assuming 问题是关于wp_get_attachment_image_src.<也可能是关于wp_get_attachment_link, 但是,尽管相关,但这一分析并不包括它

<小时>Got aware 回答这个问题:How can I view all WP generated thumbnails in Media Manager?.
请参阅该问题的工作代码

这就导致了WordPress forum topic.

功能wp_get_attachment_image_src( $attachment_id, $size, $icon ) 返回包含以下内容的数组:

[0] => url  
[1] => width  
[2] => height  
[3] => is intermediate
如果[3] 为false,则original 返回图像数据。

<小时>Both wp_get_attachment_image_srcwp_get_attachment_link 依赖功能image_downsize, 在…内/wp-includes/media.php.
这就是返回此4项数组的位置。

SO网友:Bainternet

我对此不确定,但我知道您可以使用php的getimagesize()函数,如下所示:

//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" />\';
}
我知道这并不能直接回答这个问题,但你可以使用一个名为AJAX Thumbnail Rebuild -此插件允许您重新构建帖子缩略图。如果您在上传帖子缩略图后添加了\\u image\\u size(),则会很有用。

SO网友:trewknowledge

这就是为什么只有在存在请求的大小时,我才能显示缩略图:

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

To learn more about wp_get_attachment_image_src read the Codex.

SO网友:Thompson

有一个插件,如果不存在,它会自动为您创建图像大小。http://austinmatzko.com/wordpress-plugins/filosofo-custom-image-sizes/

我自己还不需要使用这个插件。但值得一试。可能在3.2中有关于向WP核心添加类似功能的讨论http://core.trac.wordpress.org/ticket/15311

SO网友:Mathias

这似乎是一种更好的方式。使用全局变量$\\u wp\\u additional\\u image\\u size,它存储所有注册的image\\u size。因此,如果要检查图像大小名称是否为define:

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

SO网友:Charles Jaimet

最好的方法是使用Wordpress内置的“get\\u intermediate\\u image\\u size”函数以数组形式返回图像大小的完整列表,然后查看该列表。

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

SO网友:Thompson

也许这会有帮助

<?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" />\';
}
?>
发件人:http://codex.wordpress.org/Function_Reference/has_post_thumbnail
我使用类似的方法检查图像大小是否存在:

if (function_exists(\'has_post_thumbnail\') && has_post_thumbnail(\'medium\')) {
//// code to display thumbnail goes here
}
else {
/// otherwise do this
}
希望它能帮助你前进。

结束

相关推荐

Resizing all images

我刚刚更改了博客的主题,由于页面宽度很小,它打破了布局。我之前的大多数图片(附在帖子中)的宽度都在600px左右,现在我需要按450px的比例调整它们的大小。如何一次性调整它们的大小?有这个插件吗?P、 美国:编写CSS规则是一个很好的选择,我已经做到了。但我认为调整图像大小也会减少每个页面的下载开销!