WordPress 订单表单升级自定义方案
之前没有做用户注册登录提交表单,现在有注册登录了,需要对表单升级,即支持登录或非登录用户。 因此我们需要重新设计字段,要求:
1、如果用户登录了,那么自动获取用户资料(姓名、电话、邮箱等),当然也必须支持为不同订单单独设置联系方式,两种情况要考虑到兼容;
2、另外就是需要增加订单类型、状态;
3、是否有必要将订单中的用户信息字段合并。
一套 专业且可扩展 的订单字段设计方案,专门针对你现在从「无用户 → 支持用户系统」的升级需求。
重点是:兼容登录用户、非登录用户、管理员管理、未来扩展(订单状态/类型)。
一、字段设计原则(核心)
因为现在开始有「用户系统」,需求变成:
✔ 登录用户提交订单:
- 默认自动带入用户资料(姓名、电话、邮箱)
- 可以修改(例如为别人下单)
✔ 未登录用户提交订单:
- 手动填写姓名、电话、邮箱等字段
✔ 后台管理要求:
- 能看到用户是谁
- 能在订单中保存历史联系方式(即使用户后来修改了个人资料,也不影响订单记录)
所以后台订单中记录的方式必须:
推荐最优设计:采用“双轨制字段”
你需要 两类字段:
① 用户关联字段(用于管理与统计)
| 字段 | 类型 | 说明 |
|---|---|---|
order_user | user | 保存用户 ID(若未登录则为空) |
is_guest_order | true/false | 标记是否为游客订单 |
用户登录下单 → 自动存用户 ID
游客下单 → 为空 + 勾选 is_guest_order
② 订单联系信息字段(无论是否登录都独立保存)
(这是订单快照,防止用户改资料导致订单信息变动)
| 字段 | 类型 |
|---|---|
contact_name | text |
contact_phone | text |
contact_email | text |
contact_note | textarea |
为什么必须保留这一套?
因为:
- 用户未来修改了电话,则订单仍需保留历史电话
- 管理员也可能需要手动修改订单内的联系方式
- 登录用户可能帮别人下单(与账户资料不同)
这是行业标准(像 WooCommerce 也采用这种双轨制)。
核心结论
✔ 必须保留订单自己的联系方式字段(不能依赖用户资料)
✔ 同时增加 user ID 作为订单归属
二、订单分类字段(新需求)
你提到要增加「订单类型、订单状态」
① 订单类型(order_type)
用途:区分不同业务渠道
比如:
- 网站建设报价 quote
- VIP订阅 vip
- 小程序开发 mini_program
- 自定义开发 custom_dev
→ ACF 推荐使用:Select (选择框)
② 订单状态(order_status)
你可以设计:
| 状态 | 说明 |
|---|---|
| pending | 已提交(待审核) |
| reviewing | 审核中 |
| quoted | 已报价 |
| paid | 已付款 |
| completed | 已完成 |
| cancelled | 已取消 |
→ ACF 推荐使用:Select(或者 radio)
三、完整推荐字段结构(ACF)
你最终应创建如下字段:
(A) 订单关联字段(系统级)
| Field Label | Field Name | Type |
|---|---|---|
| 用户 | order_user | User |
| 是否为游客订单 | is_guest_order | True/False |
| 订单类型 | order_type | Select |
| 订单状态 | order_status | Select |
(B) 联系方式快照字段(业务级)
| Field Label | Field Name | Type |
|---|---|---|
| 联系姓名 | contact_name | Text |
| 联系电话 | contact_phone | Text |
| 联系邮箱 | contact_email | |
| 备注 | contact_note | Textarea |
(C) 订单内容字段(原本有的)
| Field Name | Type |
|---|---|
| goal | Text |
| budget | Text |
| domain | Text |
四、前端逻辑建议
如果用户已登录:
获取当前用户资料:
$current_user = wp_get_current_user();
$name = $current_user->display_name;
$phone = get_user_meta($current_user->ID, 'phone', true);
$email = $current_user->user_email;
自动填入表单,但允许修改。
提交时:
update_field('order_user', get_current_user_id(), $post_id);
update_field('is_guest_order', false, $post_id);
如果用户未登录:
表单自行填写
代码:
update_field('order_user', '', $post_id);
update_field('is_guest_order', true, $post_id);
是否要把订单中用户信息合并?
不用合并,也不应该合并。
保持:
- 用户账户资料:用于登录/用户中心
- 订单联系资料:订单独立快照
这是所有成熟系统的通用做法(Shopify、WooCommerce、飞书、SaaS系统都是这样)。