typecho默认的缩略图功能是贫穷的,只有区区一个名为img的字段显示而已,如果这个字段的内容是空白的,那你发布的文章在首页就不会显示缩略图,既$this->fields->img为空。
一般情况下,我们通过上传附件插入图片,程序会自动把图片地址加入到img字段中,但总有一些是例外的。
没有缩略图,对于首页的布局是难看的(至少我是这么认为的),所以我要改:

/** 
* 输出文章缩略图( 
* 显示顺序:小图(自定义字段) > 文章内插图(可指定第几张) > 随机图片
*/
function showThumbnail($widget,$imgnum='',$show=true){ 
//获取两个参数,文章的ID和需要显示第几张的图片,第三个参数控制输出方式
    $thumb = '';
    $rand = rand(1,10);
    $random = $widget->widget('Widget_Options')->themeUrl . '/rand/' . $rand . '.jpg'; 
    $attach = $widget->attachments(1)->attachment;
    $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';                 //#1
    $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i';     //#2
    $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i'; //#3
    if (empty($imgnum)) {
        if (!empty($widget->fields->img)){
            $thumb = $widget->fields->img;
        }    
        //搜索图片的第一个附件
        else if ($attach && $attach->isImage) {
        $thumb = $attach->url; 
        }
        else {
            $imgnum = 0;
        }
    }
    //如果文章内有插图,则调用插图
    if (preg_match_all($pattern, $widget->content, $thumbUrl) && empty($thumb)) { 
        $thumb = $thumbUrl[1][$imgnum].'#1';
    }
    //搜索内联式markdown格式的图片
    else if (preg_match_all($patternMD, $widget->content, $thumbUrl) && empty($thumb)) {
        $thumb = $thumbUrl[1][$imgnum].'#2';
    }
    //搜索脚注式markdown格式的图片
    else if (preg_match_all($patternMDfoot, $widget->content, $thumbUrl) && empty($thumb)) {
        $thumb = $thumbUrl[1][$imgnum].'#3';
    }
    //如果真的没有图片,就调用一张随机图片
    $thumb = empty($thumb) ? $random : $thumb;
    if($show){
        echo $thumb;
    }
    else{
        return $thumb;
    }
}

函数有三种调用方式:
(此处省略一万个草尼玛,该死的防火墙把我之前写的内容给拦截了,这是重写的)

  1. <?php showThumbnail($this); ?> 优先调用原有$this->fields->img图片链接,然后是附件图片,再是以下。
  2. <?php showThumbnail($this,0); ?> 优先搜索文章内插图,0表示第一张,然后再是以上。
  3. showThumbnail($this,null,false) 这个是用于赋值用的,例如:
    <?php echo '<img src=".showThumbnail($this,null,false).">' ?>

当在img字段,文章附件,文章内,都搜索不到图片时,会用主题目录下rand目录中1.jpg~10.jpg代替。