这个插件主要是给 WooCommerce 商城加一套“购买抽奖机会、抽盲盒、中奖生成订单”的流程。

这类需求挺常见,尤其是卖潮玩、盲盒、数码配件、虚拟商品的网站。客户不只是想展示一个抽奖动画,而是希望它真的能和商城订单、商品库存、支付流程接上。

简单说就是:

后台配置抽奖分组和奖品 → 用户购买抽奖机会 → 支付完成后参与抽奖 → 抽中奖品 → 自动生成中奖订单。

抽奖插件.jpg

当时要解决的问题

普通抽奖插件大多只是“前端转盘转一下”,最多记录个中奖结果。但客户这边需要的是能接 WooCommerce 的真实交易流程。

所以这个插件主要围绕几个问题做:

  • 抽奖机会怎么卖?
  • 用户付款后怎么获得抽奖资格?
  • 奖品怎么从 WooCommerce 商品里选?
  • 中奖后怎么生成订单?
  • 抽奖页面怎么不被主题样式干扰?
  • 后台怎么管理分组、概率、奖品数量?
    最后做出来的版本更像是一个小型盲盒系统,而不是单纯的抽奖按钮。

后台:先创建抽奖分组

插件后台有一个抽奖分组管理。

每个分组可以理解成一个独立活动,比如:

  • 夏季盲盒活动
  • 会员专属抽奖
  • 新品试手气
  • 付费抽奖专区
    创建分组时可以设置:
  • 分组名称
  • 活动描述
  • 抽奖价格
  • 是否启用
  • 抽奖规则
  • 产品介绍
    比较方便的一点是,创建分组后插件会自动生成一个对应的 WooCommerce 商品。这个商品不是普通商品,而是“抽奖机会商品”。用户购买它,其实就是购买参与这个分组抽奖的资格。

这样做的好处是不用单独写支付系统,直接走 WooCommerce 原来的购物车、结账、订单流程。

奖品直接用 WooCommerce 商品

奖品没有单独做一套商品系统,而是直接从 WooCommerce 商品里选。

后台可以把已有商品加入某个抽奖分组,并设置:

  • 奖品等级,比如 S、A、B、C
  • 中奖概率
  • 数量限制
  • 启用或禁用
    这个设计比较实用。因为商城里的商品本来就有图片、价格、库存、标题,直接复用 WooCommerce 商品数据,后台维护成本会低很多。

比如 S 级可以放高价值商品,概率设低一点;C 级可以放普通商品,概率高一点。后台还做了概率总览,能看到每个等级大概占多少,防止配置的时候总概率太离谱。

前端:盲盒式抽奖页面

前端不是传统大转盘,而是做成了一个盲盒页面。

页面左边是一个盲盒动画,用户点击后会有打开、粒子、奖品揭晓的效果;右边展示当前活动有哪些奖品,并按 S、A、B、C 分级展示。

页面上还会显示:

  • 抽奖标题
  • 活动介绍
  • 奖品列表
  • 抽奖规则
  • 产品说明
  • 登录提示
  • 购买按钮
  • 免费试抽按钮
    试抽按钮这个功能挺有用。用户没登录或者没购买之前,可以先点一下看看动画和中奖效果,但不会生成订单,也不会消耗真实抽奖机会。对这种玩法来说,先让用户体验一下,比直接让他付款更自然。

单抽和五连抽

插件里做了单抽,也做了五连抽。

如果一个分组里的奖品数量达到 5 个以上,前端会自动显示“五连抽”按钮。五连抽的逻辑是一次抽 5 个不同奖品,避免同一次五连抽里重复出现同一个奖品。

这个细节主要是为了用户体验。盲盒类玩法里,五连抽如果连续出重复商品,会显得很差;虽然概率系统本身没问题,但从体验上看,做去重会舒服很多。

和 WooCommerce 的集成方式

这个插件比较核心的地方就是 WooCommerce 集成。

它不是自己做支付,而是把抽奖机会包装成 WooCommerce 商品:

  1. 用户点击购买抽奖机会
  2. 插件清空或加入购物车
  3. 跳转 WooCommerce 结账页
  4. 用户完成支付
  5. 订单完成后,系统给用户发放抽奖次数
  6. 用户回到抽奖页面进行抽奖
  7. 抽中奖品后自动创建奖品订单
    这样处理有几个好处:
  • 支付方式不用重复开发
  • 订单、用户、商品都走 WooCommerce 原生体系
  • 后台能查到购买记录
  • 中奖奖品也能以订单形式留痕
  • 后续发货、售后、邮件通知都能复用 WooCommerce
    对客户来说,这比一个孤立的抽奖插件更容易落地。

为什么改成 URL 重写页面

这个版本目录名里就写了“改用 URL 重写法构建页面”。

一开始如果用普通短代码页面,容易被主题模板影响。不同 WordPress 主题会给页面加各种标题、容器、边距,甚至有些主题会改内容输出顺序。抽奖页这种强交互页面,被主题包一层之后很容易样式乱掉。

所以后面改成了类似:

/lottery/分组ID/

这种独立路由方式。

访问这个地址时,插件直接识别抽奖分组,加载自己的抽奖模板。这样页面更可控,前端动画、布局、标题、按钮状态都不容易被主题干扰。

这个处理方式不算复杂,但对定制页面很有用。尤其是抽奖、活动页、支付落地页这类页面,本来就不太适合被普通文章模板包住。

后台还做了一些运维功能

除了抽奖本身,后台还加了一些实用功能:

  • 抽奖仪表盘
  • 分组数量统计
  • 活跃分组统计
  • 抽奖记录查看
  • 数据库表状态检查
  • 兼容性检查
  • 手动创建数据库表
  • 重复抽奖商品清理
    这些功能听起来不显眼,但实际交付客户时很有用。因为插件装到不同主机、不同主题、不同 WooCommerce 版本里,总会遇到数据库表没建好、伪静态没刷新、页面规则不生效之类的问题。

与其每次手动查,不如在后台留个检查入口,后期排查会省很多事。

这个插件的重点

这个项目我觉得重点不在“抽奖动画”,而是在把抽奖玩法接进真实商城流程里。

它处理的是一整条链路:

活动配置 → 商品绑定 → 支付购买 → 抽奖资格 → 概率抽奖 → 奖品订单 → 后台记录。

如果只是做个前端动画,其实很快。但只要涉及真实支付和订单,就要考虑很多细节:

  • 用户没登录怎么办
  • 付款没完成能不能抽
  • 免费抽奖和付费抽奖怎么区分
  • 奖品数量抽完了怎么办
  • 五连抽是否允许重复
  • 中奖结果怎么留记录
  • 奖品怎么发货
  • 页面被主题影响怎么办
    这些才是这个插件真正花时间的地方。

简单总结

这个插件算是一个 WooCommerce 抽奖/盲盒玩法的定制版本。它不是独立于商城之外的小游戏,而是把抽奖活动嵌进了 WooCommerce 的商品、订单和支付体系里。

对商城来说,这种玩法可以用在新品活动、会员福利、付费盲盒、促销转化上。对开发来说,这类项目最重要的不是动画做得多花,而是交易链路要清楚,后台要能配置,结果要能追踪,出问题也要能排查。

这个项目现在回头看,代码里还有一些当时为了兼容主题和客户环境留下的处理痕迹,但整体思路还是挺实用的:用 WooCommerce 管交易,用插件管玩法,两边各做各擅长的事。