HDWebmobile 预订与预约
通过 WooCommerce 销售可预订的服务和预约,每个时段都有容量限制,绝不会超卖。
描述
HDWebmobile 预订与预约可将任何简单的 WooCommerce 产品转变为可预订服务。客户在产品页面上选择可用的日期和时间段;订单完成时预订即被确认,之后他们可以在“我的账户”下查看或取消预订。
此插件存在的原因
一款竞品预订插件(Amelia)存在一个已认证的 IDOR/批量赋值漏洞(CVE-2026-2931,CVSS 8.8):其“更新我的预订资料”端点接受一个由客户端提供的字段,用于将预订记录关联到 WordPress 用户 ID,且未检查该 ID 是否仍指向请求者自己的账户——这使得低权限客户能够重置任何 WordPress 用户的密码,包括管理员。此插件通过设计从根源上封堵了此类漏洞:
- 预订的所有者仅在唯一一处写入——即在订单完成时,取自订单自身的客户 ID——此后不再更改。此插件中不存在任何接受请求中客户 ID、用户 ID 或类似字段的“更新预订”代码路径。
- 此插件从不触碰 WordPress 密码。这里完全没有调用
wp_set_password() 或类似函数的代码路径——客户的密码完全由 WordPress 核心自身的“账户详情”界面管理。
- 客户只能查看或取消自己的预订,并在数据库查询层面直接以其登录账户为作用域进行限定——绝不使用请求中获取的 ID。
- 每个时段的容量通过原子化、防竞态条件的声明机制(数据库唯一性约束)强制执行,因此两个客户绝不会同时被确认进入同一时段而超出其配置容量。取消预订会正确释放该时段以供复用,同时被取消的记录会保留用于审计历史。
功能
- 通过产品自身的“产品数据 > 预订”选项卡,将任何简单产品转变为可预订服务
- 可配置可用日期、时间段、提前期以及可预订的未来天数
- 每时段容量——时段一旦满员即停止提供
- 订单标记为“已完成”时自动确认预订
- “我的账户”下提供“预订”选项卡,用于查看和取消即将到来的预订
- 如果时段在加入购物车与结账之间被占满,订单仍会正常完成,并会通过电子邮件通知管理员协助重新安排——预订绝不会被重复确认
限制(v1)
- 仅支持简单产品——不支持可变产品
- 不支持员工/资源分配——时段容量是单一共享数字,而非按员工分别设置
- 不支持日历同步(Google 日历、iCal 等)
安装
- 将插件上传至
/wp-content/plugins/hdwebmobile-booking-appointments,或通过 WordPress 插件界面安装。
- 激活插件。WooCommerce 必须已安装并激活。
- 编辑一个简单产品,在“产品数据”下打开其新的“预订”选项卡,并配置可用性。
许可证
GPLv2 或更高版本。参见 LICENSE。