这可能是Typecho最全面的缩略图设置了,代码来自YODU模板内部提取,为了适合大众,所以删减了下没用的东西,不保证代码没有错误233。

功能介绍
看下面的功能列表吧别傻眼233

①支持自定义字段,自定义缩略图,
②支持显示配置好的标签图片,
③有图文章显示缩略图,无图文章随机显示缩略图,
④有图文章显示缩略图,无图文章只显示一张固定的缩略图,
⑤有图文章显示缩略图,无图文章则不显示缩略图,
⑥所有文章一律显示随机缩略图,
⑦关闭所有缩略图显示
优先级介绍
关闭缩略图/所有文章一律显示随机缩略图 > 自定义图片 > 文章图片 > 标签图片 > 随机图片/固定图片

补充说明

缩略图优先显示文章中插入的图片,如果没有图片,就会去文章附件里提取图片,如果附件也没图片则根据优先级再去显示下级图片(大概吧)
下面函数啥的已经将自定义字段写出来了,需要自定义缩略图,直接在文章底部自定义字段那里添加图片链接即可【完整的链接】
文件配置说明

1,请将下面代码中的yodu改成你的模板文件夹名字
2,然后子里面建立个img文件夹,然后新建sj文件夹里面可以放随机图片1.jpg...99.jpg共99张,如果不想99张就需要把代码中的99改成你想要的数量【其实是自动判断的,只是判断失败就会启动默认的数量】

3,在img文件夹中放入mr.png图片,作为没有文章图时固定一张的缩略图

4,在img文件夹中新建文件夹tag文件夹,里面放入标签缩略名.jpg【缩略名最好别用中文】,这里的图片是文章没图但是有文章标签时,显示的图片,当然如果这个文件夹内你没有放入对于图片则显示随机图片什么的

在functions.php中function themeConfig($form){}里面添加下面的控制代码

$slimg = new Typecho_Widget_Helper_Form_Element_Select('slimg', array(
        'showon'=>'有图文章显示缩略图,无图文章随机显示缩略图',
        'Showimg' => '有图文章显示缩略图,无图文章只显示一张固定的缩略图',      
        'showoff' => '有图文章显示缩略图,无图文章则不显示缩略图',
        'allsj' => '所有文章一律显示随机缩略图',
        'guanbi' => '关闭所有缩略图显示'
    ), 'showon',
    _t('缩略图设置'), _t('默认选择“有图文章显示缩略图,无图文章随机显示缩略图”'));
    $form->addInput($slimg->multiMode());

然后在添加个缩略图函数

// 自定义关键字
function themeFields($layout) {
    $thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, NULL, _t('自定义缩略图'), _t('输入缩略图地址(仅文章有效)'));
    $layout->addItem($thumb);
}
/** 输出文章缩略图 */
function showThumbnail($widget)
{ 
    // 当文章无图片时的默认缩略图
    $dir = './usr/themes/yodu/img/sj/';//随机缩略图目录
    $n=sizeof(scandir($dir))-2;
    if($n <= 0){
    $n=99;
    }// 异常处理,干掉自动判断图片数量的功能,切换至手动
    $rand = rand(1,$n); 
    // 随机 n张缩略图

    $random = $widget->widget('Widget_Options')->themeUrl . '/img/sj/' . $rand . '.jpg'; // 随机缩略图路径
if(Typecho_Widget::widget('Widget_Options')->slimg && 'Showimg'==Typecho_Widget::widget('Widget_Options')->slimg
){
  $random = $widget->widget('Widget_Options')->themeUrl . '/img/mr.png'; //无图时只显示固定一张缩略图
}

$cai = '';//这里可以添加图片后缀,例如七牛的缩略图裁剪规则,这里默认为空
    $attach = $widget->attachments(1)->attachment;
    $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; 
  $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i';
    $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i';
if (preg_match_all($pattern, $widget->content, $thumbUrl)) {
$ctu = $thumbUrl[1][0].$cai;
    }

//如果是内联式markdown格式的图片
  else   if (preg_match_all($patternMD, $widget->content, $thumbUrl)) {
$ctu = $thumbUrl[1][0].$cai;
    }
    //如果是脚注式markdown格式的图片
    else if (preg_match_all($patternMDfoot, $widget->content, $thumbUrl)) {
$ctu = $thumbUrl[1][0].$cai;
    }

 else
if ($attach && $attach->isImage) {

$ctu = $attach->url.$cai;
    } 
else 

if ($widget->tags) {
foreach ($widget->tags as $tag) {

    $ctu = './usr/themes/yodu/img/tag/' . $tag['slug'] . '.jpg';

    if(is_file($ctu))
    { 
$ctu = $widget->widget('Widget_Options')->themeUrl . '/img/tag/' . $tag['slug'] . '.jpg';
    }
    else
 {
       $ctu = $random;
    }
break;
}
}
else {
$ctu = $random;
}
if(Typecho_Widget::widget('Widget_Options')->slimg && 'showoff'==Typecho_Widget::widget('Widget_Options')->slimg
){
if($widget->fields->thumb){$ctu = $widget->fields->thumb;}
if($ctu== $random)
echo '';
else
if($widget->is('post')||$widget->is('page')){
echo $ctu;
}else{
echo '<img src="'
.$ctu.
'">';
}
}else{
if($widget->fields->thumb){$ctu = $widget->fields->thumb;}
  if(!$widget->is('post')&&!$widget->is('page')){
if(Typecho_Widget::widget('Widget_Options')->slimg && 'allsj'==Typecho_Widget::widget('Widget_Options')->slimg
){$ctu = $random;}
}
echo $ctu;
}
}

前台index.php里面添加显示图片的代码

<?php if($this->options->slimg && 'guanbi'==$this->options->slimg): ?>
<?php else: ?>
<?php if($this->options->slimg && 'showoff'==$this->options->slimg): ?><a href="<?php $this->permalink() ?>" ><?php showThumbnail($this); ?></a>
<?php else: ?>
<img src="<?php showThumbnail($this); ?>">
        <?php endif; ?>
        <?php endif; ?>

作者:https://qqdie.com/archives/typecho-thumbnail-yes.html