关于WordPress函数set_post_thumbnail_size()和add_image_size()

set_post_thumbnail_size()是add_image_size()的子集,他俩的作用都是定义一个上传图片的规格。set_post_thumbnail_size相当于默认指定缩略图的名称为“post-thumbnail”的图像规格。
也就是说

set_post_thumbnail_size( $width, $height, $crop );

等价于

add_image_size( 'post-thumbnail', $width, $height, $crop );

via

那么,指定图像规格的意义是什么呢?
要知道,不进行特殊定制的话,WP的特色图链接的是内部媒体库里的图。当对媒体库的图片进行添加和修改的时候,WP会根据已经注册的文件规格自行创建若干个处理后的图片。如果注意观察uploads目录,你会看到一堆名为XXX-560×320.jpg、XXX-300×205.jpg、XXX-150×150.jpg的文件。这些就是WP根据规格列表自动生成的缩略图文件。WordPress默认已经支持了large(1024×1024)、medium_large(768×768)、medium(500×500)和thumb(150×150)四种规格。加上原文件是5个,如果再有post-thumbnail就是6个了。这么玩是完全不体谅空间受得了受不了啊!所以要我说,自己写主题要取缩略图的时候,直接用已经存在的四种规格里的一种就算了,跟服务器空间过不去就是跟钱过不去。
默认的四种规格的定义,可以在Settings->Media里进行修改。当原图规格不足某个级别的时候,这个级别的缩略图就不会生成。比如默认设置下上传一张图片“rora.png”是280×120,那么WP会另外多生成一张thumb规格的rora-150×150.png(thumb)出来,而不会生成mdeium和large级别的缩略图。
其实这四个默认的规格是可以采用一些手段屏蔽掉的。但不建议这么做。因为后台用到的地方很多,屏掉了属于花样作死,根据不同的浏览器能欣赏到不同的红叉。但在setting里都给改成150×150的小规格是种不错的办法。

一票取得缩略图、附件图和媒体图片的函数,都是靠着定义好的规格来取得或者显示图片的。还是以上面的图片做例子,

the_post_thumbnail( 'large' );
the_post_thumbnail( 'full' );
the_post_thumbnail();

三种调用方法,都会显示rora.png原图。其中第一种会因为找不到这个规格的文件而返回原图。

the_post_thumbnail( 'thumb' );

则是会显示rora-150×150.png。
这类函数有一大票。wp_get_attachment_image_src, wp_get_attachment_image, wp_get_attachment_link,the_post_thumbnail,get_the_post_thumbnail都可以根据不同的规格定义取不同的图片。

虽然WP已经有了三种定义,但毕竟是可以手动更改的。所以主题开发者们为了让图片符合自己的设计都喜欢增加一种或者多种规格供自己驱驰。那么问题来了,WP媒体库设计得比较蠢,它只在新文件上传或者旧文件编辑的时候才会生成剪裁后的文件。于是乎,旧主题生成的旧规格文件删除不了成了垃圾;新主题要用到的新规格找不到对应文件,就只能用原图。

因此安利两个插件。
thumbnail-cleaner可以检索uploads目录,查找过期的缩略图。
regenerate-thumbnails能够重建缩略图。
建议经常换主题的朋友们尝试使用。

已有13条评论

  1. 刚开始我傻傻地把原图都上传到我的网站空间里,买的虚拟主机空间不大,没多久就快把空间用完了。后来把图片搬到了七牛云储存,删图片时才发现上传目录那一大票缩略图~

    1. 可是七牛之类的第三方我也不信任。之前被图床坑过好几次,说终身免费后来收费的,说无限外链又不让链的,更多的是没几年就无疾而终了。所以现在所有的图片放本地。无限空间,虽然贵点儿但省心。

      1. 我倒是一直在用免费的七牛图片转储,挺稳定的啊,就是只有内页图片可以,首页不行。

        1. 我放弃图床这种形式两年之后才有的七牛。

          1. 说到七牛,我是一直在担心一个问题,不是总要求身份验证嘛,至今没验证。
            我就想……随着时间变迁,会不会日后不验证身份的用户就不能使用七牛了?
            虽然博客不贴图其实没问题,但以前连的,不支持外链一个个变叉叉就太丑了

          2. 我觉得一定会的。毕竟那谁的任期还有6年呢。我就是不喜欢受制于人的感觉才不用图床的。要是国外的还好一点,国内的服务“不可抗力”太多了一点。

  2. 因此安利两个插件
    这输入法。。。
    我以前都是在后台media里把中和大两个的大小都设置为0,也不知道有用没用,反正空间里很多裁切的缩略图看着就头晕就只能当作没看见了。

    1. 安利我没用错。是你out了,灭哈哈哈!
      那两个设0跟我说的设成150效果差不多,我觉得还是我的150好。

      1. 原来这个安利是个动词,我明白了。

  3. 图片都在又拍云,支持FTP备份。隔断时间备份一次,真的要倒闭的时候,一下子就可以转移到其他地方。地址在MYSQL批量替换即可。

    1. 这里指的主要是WP的特色图片。用the_post_thumbnail那种。放站外不是不行,但总归用起来就没那么方便了。不用特色图片功能当然把图片放哪儿都不是问题了。

      1. 也可以生成缩略图,所以我一直都是放站外。

  4. 我的图片都放到自己的图床上了,感觉wordpress自己的媒体库不是很好用。

    1. 非常鸡肋。完全不考虑小空间用户的感受。而且对有ID洁癖的人来说简直是煎熬。

  5. 我传完会定期删除原图

    1. 那你换主题的时候要当心。找不到何时规格的会去找原图。

  6. 话说这样是不是修改了wp核心代码,每次升级就得重新来过?

    1. 没改啊。我从来不提供改核心代码的方案。
      这两个插件主要对生成的图片文件操作,不改php代码的。
      如果在设定里改size的话是存在数据库里的,最标准的改法。

  7. 博主研究得真深入,对于图片,我现在都是放在七牛,不过对于boke112导航的图片到是放在主机空间中,其实这些图片还是放在自己空间里比较保险。就好比那些云盘一样,刚开始都说永久免费,结果现在只剩下百度云盘和360云盘了

    1. 我是搜中文搜不到想要的,搜到了英文之后一边对照一边理解记下来用的。我之前被图床坑过好几次,再也不敢把图片放到不受自己控制的地方了。

  8. 图片还是在主机中留一份比较好

    1. 哪儿也不如自己手里放心.

你好,新朋友。留言前请先填写昵称邮箱