B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]

热帖

B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]

说实话,我一开始折腾 B2主题私信邮件通知 这件事,纯属被逼的。

站里私信是有了。
但问题是——管理员根本看不到啊!

你说我每天打开后台看私信?
不现实,真的不现实。
有时候一忙就是两三天,一看后台——好家伙,十几条私信,全是“在吗?”“站长?”“人呢???”

我:人还活着,就是没看到。


为什么我要搞这个功能

B2本身的私信系统其实不算差:

  • 有对话列表
  • 有未读统计
  • 有 mark 分组
  • 数据库结构也挺清晰

但有一个致命问题:

👉 没有即时提醒机制

尤其是管理员(ID=1),简直就是“盲盒收信”。

后来我翻源码,才发现一个关键点:

do_action('b2_send_dmsg_action',$msg_data);

我当时直接愣住了。

???这不就是留好的后门吗?


核心实现思路(简单到离谱)

整个逻辑其实一句话:

👉 监听私信发送 → 判断是否发给管理员 → 发邮件

没了,就这。

但重点是——你得知道往哪插。


我实际动手的过程(有点曲折)

一开始我还犯了个很蠢的错误:

我试图去改 send_directmessage() 里面的代码

改了两分钟就放弃了。

原因很简单:

  • 主题更新就覆盖
  • 改核心文件容易炸
  • 后面根本不好维护

于是我冷静下来重新看代码。

然后就看到那个 do_action

那一刻真的有点爽。

👉 这就是WordPress的精髓:钩子拯救世界


真正实现代码(精简版)(放 functions.php 或插件里)

我最后写的是这种结构:

add_action('b2_send_dmsg_action', function($msg){

    if((int)$msg['to'] !== 1){
        return;
    }

    $content = wp_strip_all_tags($msg['content']);

    $subject = "【私信提醒】你有一条新消息";

    $body = "
    发送人ID:{$msg['from']}
    时间:{$msg['date']}

    内容:
    {$content}
    ";

    wp_mail('你的qq邮箱@qq.com', $subject, $body);

},10,1);

写完我第一反应是:

👉 就这????

那么如果是管理员专用(或指定用户发送呢),这里给大家打个样!!

add_action(‘b2_send_dmsg_action’, function($msg){

// 只处理发给管理员(ID=1)
if((int)$msg[‘to’] !== 1){
return;
}

// 获取发送人信息
$from_user = get_userdata($msg[‘from’]);
$from_name = $from_user ? $from_user->display_name : ‘未知用户’;

// 邮件内容
$subject = ‘【网站私信通知】你收到了新的私信’;

$content = ”
你收到了一条新的私信:

发送人:{$from_name}(ID: {$msg[‘from’]})
时间:{$msg[‘date’]}

内容:
{$msg[‘content’]}

请登录网站后台查看:
” . home_url();

// 管理员邮箱(建议填QQ邮箱)
$to = ‘你的QQ邮箱@qq.com’;

// 发送邮件
wp_mail($to, $subject, $content);

},10,1);


结果测试的时候我又崩了

发私信。
刷新邮箱。

没反应。

我当时第一反应:
“完了,是不是B2哪里限制了?”

结果查了一圈才发现:

👉 不是代码问题,是邮件压根没发出去


最大坑点:SMTP

WordPress默认的 wp_mail()

  • 不稳定
  • 容易进垃圾箱
  • 有时候直接失败

尤其你用的是QQ邮箱。

必须干这件事:

开启QQ邮箱SMTP

  • 设置 → 账户
  • 开启 SMTP
  • 拿到 授权码(不是密码)

然后装插件(强烈建议)

我用的是:

👉 WP Mail SMTP

配置完之后再试。


那一刻真的来了

我重新发了一条私信。

手机“叮”一下。

QQ邮箱推送:

👉 “你有一条新私信”

我当场一句:

卧槽终于好了!!


但问题又来了(真实使用后)

刚开始觉得很爽。

但用了一天之后我开始后悔。

因为:

👉 有人连续发私信

结果我邮箱:

  • 10秒一封
  • 30秒三封
  • 一分钟直接爆炸

我直接关闭邮件提醒那一刻:

内心:我这是在折磨自己吗???


后来我加了一个“冷静机制”

简单说就是:

👉 限制发送频率

if(get_transient('dmsg_notice')){
    return;
}
set_transient('dmsg_notice',1,60);

效果:

  • 60秒内只发一封
  • 不会被刷爆

瞬间舒服了。


一些真实体验总结(踩坑后)

优点:

  • 真·实时提醒
  • 不用盯后台
  • 管理效率提升一大截

缺点(也挺真实):

  • 容易被刷邮件
  • 内容太长邮件不好看
  • QQ邮箱有时候进垃圾箱

我现在的最终方案

现在我用的是:

  • 邮件通知(基础)
    • 后面准备接 企业微信 webhook

因为说实话:

👉 邮件还是有点“慢”和“土”

但作为第一步:

👉 已经完全够用了


总结一句人话版本

如果你也在用B2,而且有私信需求:

👉 一定要搞这个功能

否则就是:

  • 用户找你
  • 你看不到
  • 用户以为你跑路了

最后一句真心话:

👉 B2这个钩子设计真的很良心

虽然文档不说,但代码里全给你留好了。

你只要稍微懂一点:

👉 就能把它改成你想要的样子

B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]

B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。 本文使用 知识共享署名-非商业性使用 4.0 国际 许可协议。转载请注明出处!感谢!
WordPress 插件

Random Text Color – 随机彩色文字 PRO版

2025-6-21 16:08:34

WordPress 插件🥔土豆插件

record player musicbox 唱片播放器

2025-6-24 13:43:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索