1.2.0 版本大家疯狂反馈:子比主题这边有 bug、7B2 圈子那边跳转没反应。
我:记下了记下了……然后从 4 月一路拖到 7 月 才憋出这个 1.3.5。
理由只有一个:白天上班,晚上写网站——好好好,白天上班晚上继续上班。
于是,1.3.5 带着满满 Buff 正式登场:
- 该修的坑都填了(子比/7B2 圈子相关 bug ✅)
- 还顺手塞了几个小功能(智能缓存、模板重构、AJAX 转换、规则重写、一键卸载清理等)
这次不仅修坑,还直接把「王先生笔记」的王先生拉来一起开发(没错,是协作开发,不只是适配),双人组开肝!
——「我有两套加密术:AES 的正统奥义 & 随机乱拳的街头实战。」
——「7B2 圈子玩家请举手!子比党也别走,王先生笔记已经给你们安排上了~」
相关文章

01. 安全系统觉醒:双模式加密
“AES-256-CBC,企业级法术;随机字符串+时间戳,机智小偷乐。”
function dmy_link_encrypt_url($url) {
$settings = get_option('dmy_link_settings');
$method = isset($settings['dmy_link_verification_method']) ? $settings['dmy_link_verification_method'] : 'random_string';
if ($method === 'aes_encryption') {
$key = isset($settings['dmy_link_aes_key']) ? $settings['dmy_link_aes_key'] : '';
if (empty($key)) {
return generate_random_string(16);
}
$iv = substr(hash('sha256', $key, true), 0, 16);
return base64_encode(openssl_encrypt($url, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv));
} else {
return generate_random_string(16);
}
}

限时 vs 永久
随机串:计时器滴答作响;
AES:我!就!不!过!期!你!能!拿!我!怎!么!样!
if ($method === 'random_string') {
$expiration = isset($settings['dmy_link_expiration']) ? intval($settings['dmy_link_expiration']) : 5;
set_transient('dmy_link_' . $encrypted_key, $url, $expiration * 60);
} else {
set_transient('dmy_link_' . $encrypted_key, $url, 0);
}
02. 全局拦截:内容区外链一网打尽
“
the_content
过滤器上线,内部白名单放行,其他全部走跳转大厅。(除了本站emm)”add_filter('the_content', 'dmy_link_intercept_links');
内部/白名单:直达,不绕路。
其余外链:生成 Key → 缓存 → 指向 /dinterception
路由。

03. 路由重写 & 模板输出:专门的过场动画页
“
/dinterception
专线已开通,带你优雅转场。”
查询参数 a
存在?→ 取 transient 或 AES 解密 → 包含 dmylink-template.php
输出页面。
Token 失效?管理员台词 + 返回首页按钮登场(UI 不忘戏剧性,beta版本)。
04. AJAX 即点即转:圈子/论坛前端动态处理
“前端 JS 挂钩,点击即换外链,Admin-ajax 接口安全兜底。”
dmylink-circle.js 会根据你设置的选择器(比如 .topic-content
)捕获链接并请求转换。
服务端同样判断白名单/内部链接与加密策略,返回最终跳转地址。
05. 7B2 圈子 & 子比论坛 统统拿下
7B2 圈子(7B2)由 大绵羊 站长适配
子比主题(Zibll)由 天无神话 站长适配
if (is_zibll_themes()){
remove_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
remove_filter('comment_text', 'add_redirect_comment_link', 99);
add_filter('get_comment_author_link', 'dmy_add_redirect_comment_link', 5);
add_filter('comment_text', 'dmy_add_redirect_comment_link', 99);
function dmy_add_redirect_comment_link($text = '')
{
$settings = get_option('dmy_link_settings');
if (empty($settings['dmy_link_enable'])) {
return $text;
}
return dmy_link_intercept_links($text);
}
}
7B2 圈子:启用 “circle/forums” 功能后,脚本会自动针对帖子主体/回复区选择器做处理。

子比主题:自动识别、自动挂钩,你忙你的,插件替你上。

06. 样式与模板系统:风格八连抽

CSS + PHP 模板分离管理,选哪个皮肤就加哪个 Buff。
样式文件、模板文件各自就位。
有默认模板兜底,不存在“登场失败”的尴尬镜头。

07. 一键善后:卸载即清空
“插件退场要体面,选项 & transient 全部打扫干净。”
// 插件卸载时清理数据 function dmy_link_uninstall() { // 删除插件设置选项 delete_option('dmy_link_settings'); // 清理所有插件相关的transient数据 global $wpdb; $transients = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE '_transient_dmy_link_%' OR option_name LIKE '_transient_timeout_dmy_link_%'" ); foreach ($transients as $transient) { $name = str_replace('_transient_', '', $transient); delete_transient($name); } }
ED
“插件是工具,也是守护灵。”
v1.3.4 把安全、体验、适配都做成了彩蛋包,感谢各位站长的灵感加持。
下一话会不会新增更多模板、更多主题适配呢
参考链接
https://github.com/dmmyblog/dmy-link
共同开发
—— 敬请期待「大绵羊外链跳转插件 v1.4.0」!(挥手.gif)
可把我牛逼坏了😁
正主来了![[g=脱单doge]](https://dmyblog.cn/wp-content/themes/dmytheme/emojis/脱单doge.png)
![[g=脱单doge]](https://dmyblog.cn/wp-content/themes/dmytheme/emojis/脱单doge.png)
有空试试
1.3.5标题是1.3.4![[g=妙啊]](https://dmyblog.cn/wp-content/themes/dmytheme/emojis/妙啊.png)