MENU

Typecho 友链管理插件增强版 - Links Plus

• 2026 年 02 月 09 日 • 阅读: 755 • 技术,开发,文档

Links Plus

Typecho 友链管理插件增强版,支持多种内置友链展示主题(包括2种原创主题和多种复刻主题)、短代码调用输出、前台友链申请、邮件提醒友情链接审核状态

点我购买插件(¥12.88)

限时4折,优惠码 Links (40%OFF)

一些截图

.png

.png

.png

主题

主题名称主题图片(亮色)主题图片(暗色)介绍
Material Design Cards 1.png.pngMD3 风格的友链卡片网格
Material Design Cards 2.png.pngMD3 风格的友链卡片网格
Clarity 复刻.png.png主题 Clarity 复刻
Fluid 复刻.png.png主题 Fluid 复刻
Fuwari 复刻.png.png主题 Fuwari 复刻
Mirages 复刻.png.png主题 Mirages 复刻
Mizuki 复刻.png.png主题 Mizuki 复刻
Sinner 复刻.png.png主题 Sinner 复刻

使用说明

输出规则

Links 插件支持的输出规则有:

{lid}友链在数据表中存放的ID
{url}将会被替换成友链地址
{sort}友链的分类名称
{title}{description}将会被替换友链描述,两者效果一样
{name}将会被替换成友链名称
{image}将会被替换成友链图片
{user}自定义字段

1.原版SHOW函数调用(可用于主题开发)

参数可用值缺省值说明
模式SHOW_TEXTSHOW_IMGSHOW_MIXSHOW_TEXT仅输出文字仅输出图片图片 + 文字
数目整数0(不限制)输出链接条数
分类分类名ALL(所有)输出单类链接
尺寸整数32(像素)输出图片大小

函数的原型为:

output($pattern=NULL, $links_num=0, $sort=NULL)

其中,$pattern 是输出规则。输出规则是 Links 插件的一种特殊语法。使用输出规则,可以定制出属于自己的友链输出方式。例如:

<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>

这就是一个输出规则的例子。经过插件解析后,{url} 将会被替换成友链地址,{title} 将会被替换友链描述,{name} 将会被替换成友链名称。

插件自带三种输出规则:显示文字、显示图片及图文混排。
$pattern 值为 NULLSHOW_TEXT 时,则规则为显示文字。

<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>

$pattern 值为 SHOW_IMG 时,则规则为显示图片。

<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /></a></li>

$pattern 值为 SHOW_MIX 时,则规则为显示图片和文字

<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /><span>{name}</span></a></li>

$links_num 是用于控制友链输出的条数的。当 $links_num 为缺省值 0 时,表示不进行限制,输出满足条件的所有友链。

$sort 用于指定输出的友链类别,以实现友链的分类输出。缺省值 NULL 表示输出所有类别的友链。

2.原版SHOW标签调用

可以在文章或页面中加入 HTML 标签来实现友链的调用。
其调用原型为:

<links `$links_num` `$sort`>`$pattern`</links>

$links_num $sort $pattern 的功能及缺省值与函数调用一样。不过,为了 $links_num$sort 缺省值的识别,建议 $sort 采用的命名方式为:以字母开头,仅包括字母和数字。

使用向导:如在侧边栏添加友情链接 (Handsome主题)

在 0.8 默认主题上,已经集成了本插件的调用接口。因此,不需要任何的修改即可直接使用。如果主题没有本插件接口,可按照以下方式进行调用。

最简单的调用方式为:

<?php Links_Plugin::output(); ?>

此时,会列出所有的友链。
如果想调用的为图片友链,则调用方式为:

<?php Links_Plugin::output("SHOW_IMG"); ?>

如果是图文的混合友链,则调用方式为:

<?php Links_Plugin::output("SHOW_MIX"); ?>

如果想限制侧边栏的友链数量,比如说为 10 个,则调用方式为:

<?php Links_Plugin::output("SHOW_TEXT", 10); ?>

图片友链依此类推。

如果想列出某个类别的友链,则调用方式为:

<?php Links_Plugin::output("SHOW_TEXT", 0, "testsort"); ?>

如果想指定图片尺寸,则调用方式为:

<?php $this->links("SHOW_IMG", 0, "ALL", 64); ?>

Links_Plugin::output 可用 $this->links 代替

3. 短代码调用 (推荐, 支持输出友链申请表单)

直接在文章中加入短代码[LinksㅤㅤㅤㅤㅤPlus /]即可 (请不要复制上面的短代码,由于为了避免在文章中调用短代码,故上方文字中存在不可见字符,直接复制不会生效)

参数说明示例
num显示友链数量,不指定则显示全部[LinksㅤㅤㅤㅤㅤPlus num=5 /]
sort排序字段,支持 name/date/order,不指定则按后台设置[LinksㅤㅤㅤㅤㅤPlus sort=order /]
OnlyForm仅输出友链申请表单,不渲染友链列表(需已启用友链申请功能)[LinksㅤㅤㅤㅤㅤPlus OnlyForm/]

4. 正文重写

直接将友链展示的HTML代码完整输出到文章中,从而做到即使插件卸载也可查看友链。

1.配置CID

在友链(独立页面)的编辑页面中,地址栏 https://example.com/admin/write-page.php?cid=920920便是CID,将他填到 需要重写的 cid

2.添加固定占位符

将下面的内容复制到需要添加友链的地方,如:

{{links_plus}}

然后发布页面
添加固定占位符
在已经重写的页面中使用下面的标签来定位

<!-- LINKS_PLUS_START -->
<!-- LINKS_PLUS_END -->

如果不希望修改友链了可以删除,删除后如果还要修改可以 加上标签或者 全部删除然后重新使用{{links_plus}}

3.配置重写输出

插件设置中,必须配置 需要重写的cid 重写输出主题 重写输出HTML
通用主题(模板没有主题专用字样),请在 重写输出HTML中选择 使用!!!包裹

4.重写

进入 菜单-Links Plus-友情链接页面,添加需要添加的友链,然后点击右上角 执行重写即可

亮暗色适配说明

大部分主题通过body标签上的className来切换亮暗色主题,如Mirages主题

亮色主题暗色主题
image.pngimage.png

可见亮色主题的classNametheme-white,而暗色主题则为theme-dark,则在后台中也填写相关设置即可

image.png

大部分主题的类名已经内置,如果出现无法适配亮暗色主题切换的才需手动设置。

主题开发文档

模板目录为 templates/{NAME}/
必要文件:manifest.jsontemplate.html
可选文件:style.cssscript.jsmanifest.json 中 inject 决定是否注入)。
模板占位符:{name} {url} {image} {description} {sort} {lid} 等。

manifest.json

{
  "name": "主题英文名",      //这里需要与templates/{NAME}/中的NAME一致
  "title": "主题名称",       //外显主题名称
  "version": "1.0.0",       //主题更新时匹配version,格式x.x.x
  "description": "主题简介", //简要说明即可
  "wrapper": {              //用于在整组友链外层自动包一层容器
    "tag": "div",
    "class": "lp-my-theme-list",
    "id": "lp-my-theme-list",
    "attrs": {
      "role": "list"
    }
  },
  "inject": {
    "css": true,            //是否需要注入css,true则将style.css注入
    "js": true              //是否需要注入js,true则将script.js注入
  }
}

wrapper 的限制

wrapper 不是自由结构,当前实现只有下面这些键会生效:tagclassidattrs

其中 tag 只支持以下三个值:uloldiv

如果 tag 写成别的值,例如 sectionarticlemain,当前实现会直接忽略整个 wrapper。

attrs 必须是对象,例如:

{
  "wrapper": {
    "tag": "ul",
    "class": "lp-card-list",
    "attrs": {
      "role": "list",
      "data-layout": "grid"
    }
  }
}
`

专用主题(v1.4.0起仅“重写”功能可用)

部分主题可能已经终于友链显示,有特殊的Markdown语法,那么 template.html直接写Markdown格式即可,注意填写占位符。

<!-- template.html (以Mirages主题为例)-->

[{name}]({url})+({image})

主题专用一般不需要注入css和js,如果需要随机显示那么可以加js

通用主题 (“短代码”与“重写”均可用)

这个就比较多变了,给个例子,一般都需要css和js注入`

template.html 的写法要求

template.html 应只描述单条友链的模板内容。插件会遍历所有友链,把模板重复渲染后,再根据 wrapper 决定是否包裹整组输出。

推荐写法:

<li class="lp-my-theme-item">
    <a class="lp-my-theme-link" href="{url}" title="{description}" target="_blank" rel="noopener">
        <img class="lp-my-theme-avatar" src="{image}" alt="{name}" width="{size}" height="{size}">
        <span class="lp-my-theme-name">{name}</span>
        <span class="lp-my-theme-desc">{description}</span>
    </a>
</li>

不推荐在 template.html 里直接包整组列表容器,例如直接写完整的 <ul>...</ul>,除非你明确不打算使用 wrapper

可用占位符

当前模板可用占位符如下:

  • {lid}:数据库中的友链 ID。
  • {name}:友链名称。
  • {url}:友链地址。
  • {sort}:友链分类。
  • {title}:当前实现中等价于友链描述。
  • {description}:友链描述。
  • {image}:友链图片地址。
  • {user}:自定义扩展字段。
  • {size}:调用时传入的图片尺寸值。

注意:

  • 当前实现里 {title}{description} 会被替换成同一个值,也就是友链描述。
  • 如果你真正需要显示站点名称,应使用 {name},不要把 {title} 当成独立字段理解。

style.css 和 script.js 的约定

如果 manifest.json 中写了:

{
  "inject": {
    "css": true,
    "js": true
  }
}

那么插件会尝试读取当前主题目录下的 style.cssscript.js

需要注意:

  • inject.csstrue 但没有 style.css,不会报 schema 错误,但前台不会有样式注入。
  • inject.jstrue 但没有 script.js,不会报 schema 错误,但前台不会有脚本注入。
  • 样式类名建议统一加前缀,例如 lp-my-theme-*,避免污染主题本身页面。
  • 如果没有脚本需求,建议明确写成 "js": false

常见格式问题

1. manifest.json 存在,但 JSON 非法

如果 manifest.json 不是合法 JSON,模板不会被识别到后台列表中。

2. name 和目录名不一致

这是最容易踩的坑之一。

例如目录是:

templates/fancy-theme/

但 manifest 写成:

{
  "name": "my-theme"
}

这种情况下,模板可能出现在后台选择项里,但 template.htmlstyle.cssscript.js 的实际读取会按 my-theme 这个名字去拼路径,最终导致资源找不到。

结论:目录名和 name 必须保持一致。

3. template.html 缺失或为空

即使 manifest.json 正常,template.html 为空时:

  • 后台预览会读取失败。
  • 前台 SHOW_TEXTSHOW_IMGSHOW_MIX 模式下可能回退到旧配置中的输出规则。

所以不要只写 manifest.json 而漏掉 template.html

4. wrapper 和模板结构不匹配

例如:

  • wrapper.tag 写的是 ul
  • template.html 里输出的却是完整的 <div class="card-grid">...</div>

这类结构虽然未必报错,但最终 HTML 语义和布局可能会混乱。

一般建议:

  • wrapper.tag = "ul" 时,template.html 输出单个 <li>
  • wrapper.tag = "div" 时,template.html 输出单个卡片 <div>
5. 把 image.png 当成必需文件

当前代码不会因为缺少 image.png 而让模板失效。是否放预览图,只取决于你是否需要额外展示。

最小示例

manifest.json
{
  "name": "demo-grid",
  "title": "Demo Grid",
  "version": "1.0.0",
  "description": "一个最小可用的示例主题",
  "wrapper": {
    "tag": "ul",
    "class": "lp-demo-grid",
    "attrs": {
      "role": "list"
    }
  },
  "inject": {
    "css": true,
    "js": false
  }
}
template.html
<li class="lp-demo-grid__item">
    <a class="lp-demo-grid__link" href="{url}" title="{description}" target="_blank" rel="noopener">
        <img class="lp-demo-grid__avatar" src="{image}" alt="{name}" width="{size}" height="{size}">
        <span class="lp-demo-grid__name">{name}</span>
        <span class="lp-demo-grid__desc">{description}</span>
    </a>
</li>
style.css
.lp-demo-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 16px;
    padding: 0;
    margin: 0;
    list-style: none;
}

.lp-demo-grid__item {
    margin: 0;
}

.lp-demo-grid__link {
    display: flex;
    gap: 12px;
    align-items: center;
    padding: 16px;
    border-radius: 16px;
    text-decoration: none;
}

主题投稿

投稿方式

主题可以提交PR: https://github.com/lhl77/Typecho-Plugin-LinksPlus/pulls

不方便可以将主题文件发到评论区,审核过后更新到Github和博客

最后编辑于: 2026 年 06 月 23 日
返回文章列表 打赏
本页链接的二维码
打赏二维码
添加新评论

已有 4 条评论
  1. iceawa iceawa        
    好看
  2. iceawa iceawa        
    nb
  3. 寒士杰克 寒士杰克        
    好,转载了
  4. 吴蛋蛋 吴蛋蛋        
    即使插件丢失了也能正确显示友链! 这个很不错!