AumCreate

AumReserva —— 官方教程

AumReserva 把一个 WordPress 站点变成预约系统,适用于一切「一个人、一个时间」的预约: 课程、理疗、咨询、看房、维修。它不要求特定主题,也不需要其它插件。

1. 插件添加了什么

启用 AumReserva 会注册两个内容类型和两个分类法:

注册的东西装什么
服务(arb_service)可被预约的内容:时长、价格、缓冲时间,以及由谁提供
服务分类服务上的分类法,用来给目录分组
员工(arb_staff)由谁提供:职位、工作时间、休息日、状态
地点员工上的分类法,按工作地点给他们分组

预约本身不是文章。它们是独立数据表 arb_bookings 里的行 —— 所以它们有状态、有 CSV 导出、有日历,而没有编辑器页面。

前台是一个短代码加一个弹窗。访客选服务、选员工、选日期、选一个空闲的开始时间,然后 留下联系方式。预约写进表里,配置好的邮件随即发出。

2. 安装

安装并启用插件。后台出现 Reserva 菜单,下有七个页面:仪表盘、服务分类、全部服务、 全部员工、地点、全部预约、设置。

AumReserva 已启用,且是站点上唯一的插件

有两件事建议先做,因为预约表单会读取它们:

  1. Reserva → 全部服务 —— 至少添加一个服务。
  2. Reserva → 全部员工 —— 至少添加一位员工,然后在服务的指派员工里选上他。

没有指派任何员工的服务无法被预约。弹窗会停在选员工那一步,并且找不到人可选。

3. 服务

服务是一篇普通文章,外加一个服务详情面板。

服务列表
服务上的「服务详情」面板
字段控制什么
时长(分钟)这次预约持续多久
价格显示在服务卡片、弹窗和邮件里
服务后缓冲时间(分钟)预约结束后额外占用的分钟数,用于清理、记录或路途
指派员工谁能提供这个服务。访客在第一步从这些人里选
每个时段最多预约数覆盖站点级的数值。留空则跟随全局设置
定金(%)覆盖站点级的定金比例。需要 WooCommerce
选员工这一步跟随全局设置、对这个服务强制开启、或强制关闭

占用时段时,时长和缓冲是加在一起算的。一个 45 分钟的服务配 10 分钟缓冲,占用 55 分钟 —— 同一个人的下一次预约最早只能在 55 分钟之后开始。

3.1 一次承载多人的服务

另外三个字段把一个服务从「一次预约」变成「一个班次或一堂课」:

字段控制什么
固定开始时间具体时间,例如 09:00, 13:30。留空则提供当天的每一个时段
每个时间的名额数一个开始时间能承载多少人。留空表示每次预约算一组,不统计人数
每次预约的最多人数一次预约最多可带几人。仅在设置了名额数时才生效

设置了名额之后,弹窗里每个开始时间都会带上剩余名额数,预约扣减的是它的人数,而不是 直接把这个时间关掉。

服务分类只用来给你自己分组,不限制谁能约什么。

4. 员工

员工也是一篇普通文章,外加两个面板。

员工列表
员工上的「员工详情」面板

员工详情装的是「他是谁」和「他什么时候上班」:

字段控制什么
职位显示在选员工那一步的姓名下方
从业年数和职位一起显示
为该员工覆盖全局工作时间勾选后,下面两个字段取代站点级的工作时间
上班时间 / 下班时间这个人的工作日区间
休息日这个人不可约的日期,不论工作时间如何
状态在岗、休假中或停用。只有在岗的员工会被提供

自定义时间只会收窄可约范围,不会放宽。站点 09:00 开门而某位员工 10:00 才开始,那么从 10:00 起才提供他;09:00 和 09:30 两格会以「不可约」的样子留在弹窗里,而不是消失 —— 访客因此看得出这个时间存在,只是这个人不上班。

关联登录账号把这位员工连到一个 WordPress 用户:既可以关联已有账号,也可以用姓名、 邮箱地址和一封可选的欢迎邮件新建一个。关联过的员工登录后,无论在后台日历里还是通过 [arb_my_bookings],看到的都只有他自己的预约。

5. 地点

地点是员工上的分类法,不是服务上的。同一个服务可以在多个地方提供,因为提供它的人在多个 地方上班。

地点页面

选员工那一步按地点分组显示,每个地点一个小标题。被指派到两个地点的员工会在两个标题下各 出现一次。访客选的是哪一条,会随预约一起记录下来。

6. 你什么时候营业

站点级的工作时间在 Reserva → 设置 → 常规的工作时间一节:

设置项控制什么
工作日一周里哪几天接受预约
工作时间站点级的上下班时间
休息时间每天一段不接受预约的时间
时段长度提供的开始时间之间相隔多少分钟
最少提前小时数预约在开始前多少小时关闭
最多提前天数日历向后开放多少天
每个时段最多预约数一个开始时间接受几次预约,除非某个服务覆盖了它

时段长度是开始时间之间的间隔,不是预约的长度。间隔 30 分钟时,一个 45 分钟的服务会在 10:00、10:30、11:00…… 被提供,而每次预约按它自己的时长加缓冲占用时间。

7. 把预约表单放到页面上

新建一个页面,加入短代码 [arb_services]。它会把每个已发布的服务渲染成一张卡片,带价格、 时长和立即预约按钮。

服务页面

可用的短代码有三个:

短代码渲染什么
[arb_services]服务卡片和预约弹窗
[arb_booking_button]单个服务的一个按钮,用在其它内容里
[arb_my_bookings]客户自己的预约,以及预约完成后立即显示的确认信息

Reserva → 设置 → 预约流程 → 跳转页面指定访客预约完之后落在哪里。指向放了 [arb_my_bookings] 的那个页面,他就会看到刚约的内容;留空则让他停在下单的那个页面上。

8. 访客做的事

第一步 —— 选员工。 指派给这个服务的人,按地点分组。这一步可以在站点级关掉,也可以 在单个服务的选员工这一步里关掉。

选员工

第二步 —— 选日期。 不在工作日之内的、早于最少提前量的、超出最多提前天数的,以及这个 人的休息日,都显示为不可约。

选日期

第三步 —— 选时间。 按配置的间隔给出开始时间。一个时间在下列情况下不可约:落在这个人 的工作时间之外、落在休息时间里,或者被已有预约的时长加缓冲盖住。

选时间

第四步 —— 填写信息。 姓名和邮箱必填,电话和备注可选。字段上方的摘要会重复日期、时间 和员工。开启收集地址后会增加一个必填的地址字段。

填写信息

访客是否需要账号,由预约流程里的允许访客预约和要求登录决定。允许访客预约时不会创建 账号,预约按邮箱地址归属。

9. 后台里的预约

Reserva → 全部预约列出每一条预约。

全部预约

筛选条可按状态、员工、服务和日期区间收窄。CSV 导出的是当前筛选的结果,不是整张表。

状态是行上的一个下拉框,所以改状态只要一个动作,不需要单独的页面。状态有五种:待确认、 已确认、已取消、已完成和未到。新预约落在哪一种,由预约流程里的 自动确认预约决定:关掉它,预约就以待确认的状态进来等你处理。

10. 日历

Reserva → 仪表盘上有四个计数、最近的预约,和一个日历。

仪表盘和日历

日历每位员工一列,最前面还有一列未指派,装没有指定员工的预约。日和周切换跨度, 员工下拉框把它收窄到一个人。

关联了登录账号的员工,只看得到他自己那一列。

11. 邮件

Reserva → 设置 → 通知决定谁会被告知什么:

通知发给什么时候
新预约客户、员工有人下单时
已确认客户预约转为已确认时
已取消客户、员工预约转为已取消时
提醒客户、员工预约开始前设定的小时数

每个收件人各是一个开关,而启用邮件是它们之上的总开关。管理员邮箱设定的是:当一条 预约没有指定员工时,那份本该发给员工的邮件发往哪里。

提醒由 WP-Cron 发送,所以它依赖站点有访问量,或者有一个真正的 cron 任务在调用 wp-cron.php。在没有访客的站点上,提醒会迟发或根本不发。

12. 给这三样东西改名

「服务」「员工」「地点」只是默认叫法。Reserva → 设置 → 常规 → 名称自定义可以改掉这三样 的单数和复数。

设置页,常规标签

复数那几个标签同时也是服务归档页、员工页和地点页的网址基础。把服务改成理疗, 归档页就从 /services/ 变成 /treatments/。指向旧地址的链接会失效,所以改名要在对外发布 链接之前做,不要在之后。

改过的名称会出现在后台菜单、面包屑、归档页标题,以及预约弹窗的每一步里。

13. 设置项逐项

设置页有三个标签。

13.1 常规

设置项作用
名称自定义第 12 节说的那六个标签
货币符号加在插件渲染的每个价格前面
时间格式12 小时制或 24 小时制,作用于插件渲染的每一个时间,邮件也算
工作日一周里哪几天接受预约
工作时间站点级的上下班时间
休息时间每天一段不接受预约的时间
时段长度提供的开始时间之间的间隔
每个时段最多预约数一个开始时间接受几次预约,除非某个服务覆盖了它
最少提前小时数在预约开始前这么多小时关闭预约
最多提前天数日历向后开放这么多天
定金(%)站点级的定金,在预约时收取。需要 WooCommerce

13.2 预约流程

设置项作用
选员工这一步站点级地决定弹窗要不要问员工
允许访客预约不注册账号能不能预约
要求登录要不要有账号才能打开表单
自动确认预约新预约进来是已确认还是待确认
允许客户取消客户自己的预约上要不要出现取消按钮
取消截止(小时)在预约开始前多少小时关闭取消
收集地址增加一个必填的地址字段,用于上门服务
跳转页面访客预约完落在哪里

13.3 通知

设置项作用
启用邮件所有通知之上的总开关
管理员邮箱预约没有指定员工时,那份员工邮件发往哪里
通知客户:新建、已确认、已取消发给客户的每条消息各一个开关
通知员工:新建、已取消发给员工的每条消息各一个开关
提醒小时数在预约开始前多少小时发出提醒
提醒的收件人提醒发给客户、员工,还是两者都发

14. 疑难排查

弹窗打开了,但一个人都没有。 这个服务没有指派任何员工。指派员工是服务上的字段, 不是员工上的。状态为休假中或停用的员工同样不会被提供。

日历里每一天都不可约。 先查工作日,再查这位员工的自定义时间,再查最少提前量。最少提前 量大于最多提前天数时,一天可约的日子都不会剩下。

白天中间缺了一些时段。 休息时间不接受预约;另外,一个开始时间如果加上时长和缓冲会越过 下班时间,它也不会被提供。

时间的格式不对。 常规里的时间格式作用于插件渲染的每一个时间,邮件也算在内。

提醒收不到。 提醒跑在 WP-Cron 上。确认 wp-cron.php 确实在被调用 —— 要么靠站点访问量, 要么靠一个真正的 cron 任务。

访客预约完看到的是一堵登录墙。 1.5.5 已修。在那之前,跳转地址带着预约编号而没有任何 一端读它。1.5.5 起,跳转页面会显示刚刚下的那条预约。

本教程里的截图由本目录下的规格重新生成,对应的插件版本记录在 `img/shot-meta.json` 里。