比比主题论坛红包拓展
一款基于 bbPress 论坛、专为「比比主题」(BeeBeeWork)打造的论坛红包插件。支持积分 / 站内币双币种拼手气红包,可挂在新帖上随帖送出,带每日限额、过期自动退款、站内信通知与后台管理。
一、插件内容介绍
它能做什么
- 双币种拼手气红包:发帖时可选择「积分」或「站内币」发放拼手气红包,金额随机分配,先抢先得。
- 币种跟随主插件:红包里的「币」名称不再写死,而是自动读取比比主题后台设置的货币名(例如本站的「奶狗币」),换站换名无需改代码。
- 挂在新帖上送出:红包与「发帖」绑定——只有发新帖(主帖)时才能附带红包,评论 / 回复不允许发红包,避免刷屏。
- 领取条件可配置:可设置「需在本帖回复后才能领取」「仅会员可领」「会员等级门槛」,鼓励真实互动。
- 每日限额 + 过期退款:每个用户每天发送次数有限额;已发出但未抢完的红包,超过设定天数(默认 7 天)自动把剩余金额退给发红包的人。
- 站内信通知:抢到红包、红包过期退款等节点会触发站内信提醒。
- 后台管理页:管理员可在后台查看红包数据、手动为某帖子补发红包、处理异常。
- 广场列表红包徽章:论坛广场 / 版块 / 标签列表里,带红包的话题标题前会显示一个红包 SVG 徽章(红色胶囊 + 红包图标 + “红包 1/100” 之类文案),一眼可辨。
体验细节
- 所有访客都看得到:未登录用户也能看到红包卡样式、列表徽章;点击「抢红包」会弹出引导登录的提示,而不是直接报错。
- 纯 SVG 图标,无 emoji 依赖:红包图标用内联 SVG(红身 + 白圆 + ¥ 符),不依赖主题图标字体,换主题也不会变空白。
- 小数金额智能折算:站内币红包支持拆到小数,整数部分入账为币,零头按「1 币 = 100 积分」自动折算成积分发放,避免小数币无法入账。
二、如何制作(技术实现)
整体架构
插件采用经典的 WordPress 插件结构,分三层:
| 层 | 文件 | 职责 |
|---|---|---|
| 入口 / 钩子注册 | bee-redpacket.php |
定义版本常量、注册 bbPress 钩子、加载类 |
| 核心逻辑 | includes/class-redpacket.php |
红包创建 / 分配 / 领取 / 退款 / 渲染 / 后台 metabox |
| 前端 | assets/bee-redpacket-1.0.0.js + .css |
发红包弹窗、抢红包弹窗、列表徽章注入 |
记账与积分体系复用母主题 BeeBeeWork 的 Ledger(\BeebeeWork\Core\Ledger),缺失时回退到自带的积分日志写入,保证与主站经济系统一致。
关键设计点
1. 创建与发布解耦(pending 机制)
先通过 AJAX 把红包「全额冻结」(扣除)创建为 pending 状态并存进 transient,等帖子真正发布成功后再把红包挂上去。这样无论主题回复 / 发帖走标准提交还是自定义 AJAX,都不会因为表单字段透传失败而丢红包。
2. 拼手气分配算法
后端按「二倍均值法」在总额与人数间随机切分,保证每人至少能领到一点、且总和恰好等于红包总额(含小数精确处理,这也是早期版本弹窗金额显示 bug 的修复点)。
3. 领取条件校验
can_claim 会依次检查:是否已抢光、是否过期、是否是自己发的、是否满足「已回复 / 会员 / 等级」条件,任一不满足都返回对应提示。
4. 过期自动退款
注册了 bee_rp_expire 定时事件(cron),扫描过期且未领完的红包,把剩余金额退回发红包者并发送站内信。
5. 安全防护
所有 AJAX 接口走 wp_create_nonce('bee_rp') 校验;金额 / 人数 / 币种在前后端双重校验,防止超额或越权。
文件清单(核心)
bee-redpacket/
├── bee-redpacket.php # 入口、钩子、版本常量
├── includes/class-redpacket.php # 全部业务逻辑
└── assets/
├── bee-redpacket-1.0.0.js # 前端交互
└── bee-redpacket-1.0.0.css # 样式
三、AI 在这次制作中做了哪些
本插件在开发 / 迭代过程中,大量环节由 AI 编程助手(CodeBuddy)协助完成,主要集中在细节打磨、Bug 修复与体验优化:
- 红包图标统一为 SVG:把列表徽章里的 🧧 emoji、以及服务端可能渲染不出的主题图标字体类,统一替换成你提供的红包内联 SVG,保证深色 / 新主题下也必定可见、两处图标一致。
- 修复弹窗金额显示 Bug:早期版本在金额带小数点时,弹窗只显示小数部分、丢掉整数与货币单位。AI 定位到红包分配与
amountLabel生成逻辑并修正,金额现在完整显示(如12.34 奶狗币)。 - 币名动态化:把写死的「比比币」改为读取母主题
bw_pub_manager_options['coingroup']['set']['name'],于是你的站点自动显示「奶狗币」,其他站点按其设置显示。 - 限制「仅发帖可发红包」:按要求把发红包能力从「发帖 + 评论」收窄为「仅主帖」。改了四处:前端发红包按钮在回复表单不注入、后端
save_post只处理topic、后台发卡面板只挂话题、并移除bbp_new_reply钩子。已挂在旧回复上的红包仍正常可抢,不受影响。 - 游客也能看到红包资源:修复了「未登录时整页不加载红包 JS/CSS」的问题:把「加载资源」与「发红包权限」解耦,所有访客(含游客)在话题页 / 列表页都能加载样式与抢红包弹窗;游客点击抢红包会友好提示登录并跳转。
- 版本与命名管理:协助完成版本号迭代(1.0.10 → 1.1.0 → 1.0.0)、插件改名(「比比工房论坛红包」→「比比主题论坛红包拓展」),并同步重命名资源文件名,避免 404。
简言之:核心业务骨架由人工设计,AI 负责把细节做对、做稳、做漂亮——图标一致性、金额精度、币名适配、权限边界、游客体验和版本发布,都在这个协作过程中被逐步打磨到位。
本文由 AI 协助整理生成,适用于在你的站点「文章」频道发布,向用户介绍这款论坛红包拓展。