仅在存在请求的尺寸时显示缩略图


10

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

如果要求的尺寸不存在,如何强制他们显示“无图像”之类的占位符?


1
您是在谈论已注册的缩略图大小,还是试图获得任意未注册的以像素为单位的大小?请提供代码示例?
罗斯特(Rarst)2011年

关于已注册的大小
Alex

Answers:


2

假设问题是关于wp_get_attachment_image_src
它也可能与有关wp_get_attachment_link,但是尽管相关,但此分析未包括在内。


在回答以下问题时就意识到了这个问题:如何在Media Manager中查看所有WP生成的缩略图?
参考它以查看有关此Question问题的有效代码。

它导致了这个WordPress论坛主题


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

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

如果[3]为假,original则返回图像数据。


双方 wp_get_attachment_image_srcwp_get_attachment_link依靠在功能image_downsize,内置/wp-includes/media.php
这就是返回这4个项目的数组的地方。


1

我不确定这一点,但我知道您可以使用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缩略图重建的插件-该插件可让您重建帖子缩略图。如果您已经上传帖子缩略图后添加了add_image_size(),则很有用。


1

这是我仅在存在请求的大小时才能够显示缩略图的方式:

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

要了解有关wp_get_attachment_image_src阅读法典的更多信息。



0

这似乎是一个更好的方法。使用全局变量$ _wp_additional_image_sizes,它将存储所有已注册的image_size。因此,如果要检查是否定义了图像尺寸名称:

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

0

最好的方法是使用Wordpress的内置“ get_intermediate_image_sizes”函数以数组形式返回图像大小的完整列表,然后进行浏览。

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

-1

也许这会有所帮助

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

希望它能帮助您前进。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.