Links Plus
Typecho 友链管理插件增强版,支持多种内置友链展示主题(包括2种原创主题和多种复刻主题)、短代码调用输出、前台友链申请、邮件提醒友情链接审核状态
限时4折,优惠码 Links (40%OFF)
一些截图


主题
| 主题名称 | 主题图片(亮色) | 主题图片(暗色) | 介绍 |
|---|---|---|---|
| Material Design Cards 1 | ![]() | ![]() | MD3 风格的友链卡片网格 |
| Material Design Cards 2 | ![]() | ![]() | MD3 风格的友链卡片网格 |
| Clarity 复刻 | ![]() | ![]() | 主题 Clarity 复刻 |
| Fluid 复刻 | ![]() | ![]() | 主题 Fluid 复刻 |
| Fuwari 复刻 | ![]() | ![]() | 主题 Fuwari 复刻 |
| Mirages 复刻 | ![]() | ![]() | 主题 Mirages 复刻 |
| Mizuki 复刻 | ![]() | ![]() | 主题 Mizuki 复刻 |
| Sinner 复刻 | ![]() | ![]() | 主题 Sinner 复刻 |
使用说明
输出规则
Links 插件支持的输出规则有:
{lid}友链在数据表中存放的ID
{url}将会被替换成友链地址
{sort}友链的分类名称
{title}{description}将会被替换友链描述,两者效果一样
{name}将会被替换成友链名称
{image}将会被替换成友链图片
{user}自定义字段1.原版SHOW函数调用(可用于主题开发)
| 参数 | 可用值 | 缺省值 | 说明 |
|---|---|---|---|
| 模式 | SHOW_TEXTSHOW_IMGSHOW_MIX | SHOW_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 值为 NULL 或 SHOW_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=920中 920便是CID,将他填到 需要重写的 cid中
2.添加固定占位符
将下面的内容复制到需要添加友链的地方,如:
{{links_plus}}然后发布页面
在已经重写的页面中使用下面的标签来定位
<!-- LINKS_PLUS_START -->
<!-- LINKS_PLUS_END -->如果不希望修改友链了可以删除,删除后如果还要修改可以 加上标签或者 全部删除然后重新使用{{links_plus}}
3.配置重写输出
在 插件设置中,必须配置 需要重写的cid 重写输出主题 重写输出HTML
通用主题(模板没有主题专用字样),请在 重写输出HTML中选择 使用!!!包裹
4.重写
进入 菜单-Links Plus-友情链接页面,添加需要添加的友链,然后点击右上角 执行重写即可
亮暗色适配说明
大部分主题通过body标签上的className来切换亮暗色主题,如Mirages主题:
| 亮色主题 | 暗色主题 |
|---|---|
![]() | ![]() |
可见亮色主题的className为theme-white,而暗色主题则为theme-dark,则在后台中也填写相关设置即可

大部分主题的类名已经内置,如果出现无法适配亮暗色主题切换的才需手动设置。
主题开发文档
模板目录为 templates/{NAME}/。
必要文件:manifest.json、template.html。
可选文件:style.css、script.js(manifest.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 不是自由结构,当前实现只有下面这些键会生效:tag,class,id,attrs
其中 tag 只支持以下三个值:ul,ol,div
如果 tag 写成别的值,例如 section、article、main,当前实现会直接忽略整个 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.css 和 script.js。
需要注意:
inject.css为true但没有style.css,不会报 schema 错误,但前台不会有样式注入。inject.js为true但没有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.html、style.css、script.js 的实际读取会按 my-theme 这个名字去拼路径,最终导致资源找不到。
结论:目录名和 name 必须保持一致。
3. template.html 缺失或为空
即使 manifest.json 正常,template.html 为空时:
- 后台预览会读取失败。
- 前台
SHOW_TEXT、SHOW_IMG、SHOW_MIX模式下可能回退到旧配置中的输出规则。
所以不要只写 manifest.json 而漏掉 template.html。
4. wrapper 和模板结构不匹配
例如:
wrapper.tag写的是ultemplate.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和博客
本文章采用 CC BY-NC-SA 4.0 协议授权,转载请注明来源。
文章名称:Typecho 友链管理插件增强版 - Links Plus
文章链接:https://blog.lhl.one/artical/902.html

















