Typecho 官网上有一个名为 PageToLinks 的插件,其作用是把某个特定页面(友情链接页面)中的链接提取出来,并插入到模版公共区域。
不过经过测试不支持 MarkDown 的页面,所以进行了一下修改并整合到现在这个主题中。

如果你的友情链接页面中最终的格式是这样的:

<ul>
 <li><a href="https://www.baidu.com">baidu</a></li>
 ...
 </li>
</ul>
...
<ul>
...
</ul>

那么本文的代码就适合,下面放上代码,扔到 functions.php 中。

function links($slug)
{
    $db = Typecho_Db::get();
    $Contents = Typecho_Widget::widget('Widget_Abstract_Contents');
    $value = $db->fetchRow($db->select()
            ->from('table.contents')
            ->where('table.contents.status = ?', 'publish')
            ->where('table.contents.type = ?', 'page')
            ->where('table.contents.slug = ?', $slug)
            ->where('table.contents.password IS NULL')
            ->limit(1));
    $value = $Contents->filter($value);
    if (0 === strpos($value['text'], '<!--markdown-->')) {
        $value['isMarkdown'] = 0;
    } else {
        $value['isMarkdown'] = 1;
    }
    if ($value['isMarkdown'] == 1) {
        $text = substr($value['text'], 15);
        $text = $Contents->markdown($text);
    } else {
        $text = $Contents->autoP($value['text']);
    }

    $search = '/<ul>(.*?)<\/ul>/is';
    preg_match_all($search, $text, $matches);
    $result = '';
    foreach ($matches[1] as $v) {
        $result .= $v;
    }
    //以下三行稍微处理了一下,如果不需要删除就可以
    $result = str_replace('<li>', '', $result);
    $result = str_replace('</li>', '<br/>', $result);
    $result = rtrim($result, '<br/>');
    echo $result;
}

在需要输出友链的模版中插入以下代码:

<?php links('links');?>

其中 links 函数的参数需要填写友情链接页面的 slug(别名),比如这里的就是 links。

到这里就大功告成啦 キャ━━━━(゚∀゚)━━━━!!