外链跳转插件 releases
一款功能完善、可视化定制的 WordPress 外链安全跳转插件。
★ 0stars
5release downloads
0forks
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/jacky088/external-link/releases/download/v1.2.2/External-Link-1.2.2.zipReadme
External Link — WordPress 外链跳转插件
一款功能完善、可视化定制的 WordPress 外链安全跳转插件。
自动拦截文章/评论/圈子中的外链,强制经过可控的提示页跳转;
内置 8 套精美提示页样式、两种加密验证机制、子比 / 7b2 主题深度适配
目录
核心特性
- 自动拦截外链:
the_content、get_comment_author_link、comment_text过滤器全方位接管,文章/评论外链统一改写为跳转 URL。 - 前端实时换链(防 CDN 缓存过期):点击外链时通过 AJAX 实时换取最新跳转 URL,并在新窗口打开拦截提示页,原内容页保持不动。彻底解决启用 CDN / 页面缓存后跳转 Token 过期失效的问题。
- 全站整页外链接管:基于 output buffer 在线接管整页 HTML,网址导航、导航菜单(
wp_nav_menu)、侧栏/页脚、图片广告、WebStack_sites_link等所有不经the_content的外链统一拦截,任意主题通用。 - 白名单系统:兼容域名后缀、完整 URL 两种形式,每行一个;纯域名会匹配其子域名,完整 URL 按路径边界匹配。
- 8 套精美提示页样式:默认(茉莉小栈)毛玻璃 / 哔哩哔哩 / 腾讯云社区 / CSDN / 知乎 / 通用跳转(紫蓝渐变) / 墨星博客 / TikTok 海外版。后台可视化预览,一键切换。
- 两种加密验证机制:
- 随机字符串 Token + 过期机制(默认 5 分钟,可自定义 1–1440 分钟)
- AES-256-GCM 自包含加密 URL(无需数据库,有效期可自定义,默认永久有效),兼容旧 g1 / CBC 链接
- Referer 防护:开启后禁止站外直接访问跳转页(403),支持空 Referer 放行与白名单。
- 可自定义跳转页 Slug:默认
dinterception,后台修改即自动刷新 Rewrite。 - Logo 自定义:支持上传自定义 Logo,未设置时优雅回退。
- 主题深度适配:子比(zibll)主题自动关闭其原生外链重定向并接管相关过滤器;7b2 主题圈子支持自定义 CSS 选择器。
- AJAX 动态转链:基于
MutationObserver+requestIdleCallback扫描选择器内新增的链接,配合公开 AJAX 接口(Nginx 缓存友好、内置按 IP 限流)完成转换。 - 热更新友好:CSS/JS 缓存版本由「插件版本号 + 文件修改时间」双维度生成,热替换/升级插件文件后浏览器自动拉取新资源,无需手动清缓存。
- 优雅卸载:自动清理 options、transient、Rewrite,无残留。
环境要求
| 项 | 要求 |
|---|---|
| WordPress | 6.4 及以上(测试至 7.0) |
| PHP | 7.4 及以上 |
| 固定链接 | 需启用(默认 /%postname%/ 即可) |
| 主题 | 任意,子比(zibll) / 7b2 主题有额外适配 |
| 浏览器 | 支持 ES6 / requestIdleCallback 的现代浏览器 |
安装
方式一:WordPress 后台上传
- 进入 插件 → 安装插件 → 上传插件
- 选择
external-link.zip(或从 Releases 下载) - 安装并启用插件
- 进入 设置 → 固定链接,点击一次「保存更改」以刷新 Rewrite 规则
方式二:手动上传
- 将整个
external-link目录上传至wp-content/plugins/ - 在「插件」列表启用 外链跳转插件
- 同样建议刷新一次固定链接
方式三:从 GitHub 拉取开发版
cd wp-content/plugins/
git clone https://github.com/Jacky088/External-Link.git external-link
使用方法
- 后台左侧菜单点击 「外链跳转插件」 进入设置面板。
- 在 基本设置 中确认总开关已启用,按需修改跳转页路径(Slug)。
- 白名单设置 中按行填入信任的链接或域名。
- 样式设置 中选择喜欢的提示页样式(下方有预览)。
- 安全设置 中选择验证方式:随机 Token(推荐)或 AES 加密。
- 保存设置后立即生效,无需手动刷新。
后台设置一览
| 分区 | 设置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| 基本设置 | 启用插件功能 | switcher | ✅ | 关闭后所有拦截与样式停用 |
| 跳转页路径(Slug) | text | dinterception |
仅允许小写字母/数字/短横线,保存即自动 flush rewrite | |
| 白名单设置 | 白名单链接 | textarea | — | 每行一个,纯域名兼容子域名,完整 URL 按路径边界匹配 |
| 样式设置 | 提示页面样式 | image_select | external-link-default |
8 套可视化选择 |
| 主题社区功能 | 选择社区功能类型 | radio | none |
none / circle(7b2) / forums(子比) |
| 圈子内容选择器 | text | .topic-content |
仅 circle 类型显示 | |
| 社区帖子选择器 | text | .forum-article |
仅 forums 类型显示 | |
| Logo 设置 | Logo 图片 | upload | — | 上传自定义 Logo |
| 安全设置 | 链接验证方式 | radio | random_string |
random_string / aes_encryption |
| 过期时间(分钟) | number | 5 |
1–1440,仅 random_string 类型显示 | |
| AES 加密密钥 | text | 自动随机 32 位 hex | 仅 aes_encryption 类型显示 | |
| AES Token 有效期(分钟) | number | 0 |
0=永不过期,最大 43200(30 天),仅 aes_encryption 类型显示 | |
| 启用 Referer 防护 | switcher | ❌ | 开启后禁止站外直接访问跳转页 | |
| 允许空 Referer | switcher | ✅ | 仅 Referer 防护开启时显示 | |
| Referer 白名单 | textarea | — | 每行一个域名/URL,仅 Referer 防护开启时显示 | |
| 换链接口拒绝空 Referer | switcher | ❌ | 开启后实时换链接口拒绝无 Referer 请求,防止脚本批量滥用 |
提示页样式
| 标识 | 中文名 | 风格 |
|---|---|---|
external-link-default |
默认样式(茉莉小栈) | 粉胶囊按钮 + 紫粉渐变背景 + 毛玻璃卡片 |
external-link-bilibili |
哔哩哔哩 | 浅灰底 + 白卡 + 角落装饰 |
external-link-tencent |
腾讯云社区 | 极简白卡 + 蓝色「继续访问」按钮 |
external-link-csdn |
CSDN | 浅灰底 + 米黄图标 + 橙色描边按钮 |
external-link-zhihu |
知乎 | 灰白底 + 蓝色实心按钮 + 长 URL 区域 |
external-link-jump |
通用跳转 | 紫蓝渐变 + 圆形警示图标 + slideIn 动画 |
external-link-moxing |
墨星博客 | 整张背景图 + 双色渐变胶囊按钮 |
external-link-tiktok |
TikTok | 海外版 + 387×48 描边按钮 + mobile safe-area |
后台切换后立即生效,所选样式通过 dmy_link_style 选项持久化。
安全机制
随机字符串 Token(默认)
- 形态:
<token>由[A-Za-z0-9]{16}_<timestamp>组成 - 存储:通过
set_transient('dmy_link_<key>', $url, $expiration*60)写入 options - 有效期:默认 5 分钟,可后台自定义 1–1440 分钟
- 过期后访问触发 404 提示页 + 返回首页按钮
AES-256-GCM 自包含加密
- 形态:
g2.前缀 + base64url(随机 IV(12B) + 认证标签(16B) + 密文),明文为「过期时间戳|URL」 - 存储:无需数据库,密文完全自包含(不写入任何 transient / options,避免表膨胀)
- 有效期:后台可自定义,
0= 永不过期(默认),最大 43200 分钟(30 天);过期后访问触发 404 提示页 - 兼容性:旧版
g1.Token(无过期信息)与更早的 AES-CBC 链接均可继续解密跳转 - 兜底机制:AES 失效/缺密钥时自动回退到随机字符串方式
Referer 防护
- 默认关闭,开启后访问跳转页若 Referer 非本站且不在白名单,直接 403
- 支持「允许空 Referer」与自定义白名单,兼顾 SEO 与安全
接口限流与防滥用
- 实时换链接口按 IP 限流:默认 120 次/分钟,可通过
external_link_rate_limit过滤器调整(设为 0 关闭) - Referer 非本站的请求直接 403;另提供「换链接口拒绝空 Referer」开关(默认关闭,兼容严格 Referrer-Policy 的站点)
- 跳转逻辑排除后台 / AJAX / REST 请求,后台 URL 携带
?a=参数不会误触发跳转
主题适配
子比(zibll) / 子比比子主题
- ✅ 自动
_spz('go_link_s', false)/_spz('go_link_nonce_s', false)强制关闭主题原生外链跳转 - ✅
remove_filter接管the_content、comment_text、get_comment_author_link - ✅
remove_action接管用户详情模态框 AJAX(个人网站字段走插件转链) - ✅ 后台面板在子比环境下使用
light主题色,更协调
7b2 主题
- ✅ 圈子功能(circle):通过 CSS 选择器(默认
.topic-content,可后台自定义)扫描动态加载的外链 - ✅ 基于
MutationObserver+requestIdleCallback异步处理,不阻塞首屏渲染 - ✅ 防重复处理:已标记(
data-external-link)或已预取(dataset.externalLinkPrefetched)的链接自动跳过
全站整页接管(所有主题通用)
从 v1.2.0 起,插件不再局限于 the_content 与特定主题,而是对整页前台 HTML 进行 output buffer 统一接管:
- ✅ 适用于任意主题:网址导航、导航菜单(
wp_nav_menu)、侧栏、页脚、图片广告等所有不经the_content输出的外链都被拦截 - ✅ 不修改原始 href / 字段:仅向指向外链的
<a>追加data-external-link标记,保留原 href(利于 SEO) - ✅ favicon 接口抓取、二维码拼接、缩略图判断、
_sites_link自定义字段(WebStack)等其它用途完全不受影响 - ✅ 前台所有页面统一接管;后台编辑、REST/AJAX 接口、跳转页本身不受影响
- ✅ 站内链接、白名单链接、锚点、
mailto:、javascript:等直接放行
目录结构
external-link/
├── external-link.php # 插件主入口
├── external-link-template.php # 跳转页模板调度器
├── README.md
├── .gitignore
├── assets/
│ └── img/ # 样式预览与提示页素材
├── js/
│ └── external-link-live.js # 前端实时换链(防缓存过期)
├── css/
│ ├── external-link.css # 基础样式
│ ├── external-link-default.css
│ ├── external-link-bilibili.css
│ ├── external-link-tencent.css
│ ├── external-link-csdn.css
│ ├── external-link-zhihu.css
│ ├── external-link-jump.css
│ ├── external-link-moxing.css
│ └── external-link-tiktok.css
├── templates/
│ ├── header.php
│ ├── default-style.php
│ ├── bilibili-style.php
│ ├── tencent-style.php
│ ├── csdn-style.php
│ ├── zhihu-style.php
│ ├── jump-style.php
│ ├── moxing-style.php
│ └── tiktok-style.php
└── codestar-framework/ # 第三方配置面板框架(vendor)
└── admin-settings/
└── external-link-settings.php
更新日志
v1.2.2
- 优化:优化资源缓存方式,支持热更新。
v1.2.1(安全加固)
- 加固:实时换链接口新增按 IP 限流(默认 120 次/分钟)。
- 新增:安全设置中可选「换链接口拒绝空 Referer」(默认关闭)。
- 新增:AES 模式 Token 支持设置有效期。
- 加固:后台 / AJAX / REST 请求不再处理跳转逻辑。
- 加固:跳转页样式标识清洗。
- 加固:整页外链接管跳过 `
Read the full README on GitHub →