编写思路

  1. 通过 Typecho 通用过滤器过滤文章内容
  2. 用正则匹配得出图片链接
  3. 提取第一个图片地址

实现代码

以下代码,放置在主题 functions.php 中即可。

function getMarkdownPostThumb($cid)
{
    $db = Typecho_Db::get();
    $rs = $db->fetchRow($db->select('table.contents.text')
        ->from('table.contents')
        ->where('table.contents.cid=?', $cid)
        ->order('table.contents.cid', Typecho_Db::SORT_ASC)
        ->limit(1));
    $final = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($rs);
    preg_match_all("/(http:\/\/)[^>]*?.(png|jpg)/i", $final['text'], $thumbUrl);  // 通过正则获取图片地址
    $img_src = $thumbUrl[0][0];  // 将赋值给img_src
    $img_counter = count($thumbUrl[0]);  // 一个src地址的计数器
    switch ($img_counter > 0) {
        case $allPics = 1:
            echo $img_src;  // 当找到一个src地址的时候,输出缩略图
            break;
        default:
            echo 'nopic.png';  // 没找到(默认情况下),输出默认图片
    };
}

调用方法

<?php getMarkdownPostThumb($this->cid); ?>