博客 / WordPress 教程

WordPress 订单表单升级自定义方案

之前没有做用户注册登录提交表单,现在有注册登录了,需要对表单升级,即支持登录或非登录用户。 因此我们需要重新设计字段,要求:

1、如果用户登录了,那么自动获取用户资料(姓名、电话、邮箱等),当然也必须支持为不同订单单独设置联系方式,两种情况要考虑到兼容;

2、另外就是需要增加订单类型、状态;

3、是否有必要将订单中的用户信息字段合并。

一套 专业且可扩展 的订单字段设计方案,专门针对你现在从「无用户 → 支持用户系统」的升级需求。
重点是:兼容登录用户、非登录用户、管理员管理、未来扩展(订单状态/类型)

一、字段设计原则(核心)

因为现在开始有「用户系统」,需求变成:

✔ 登录用户提交订单:

  • 默认自动带入用户资料(姓名、电话、邮箱)
  • 可以修改(例如为别人下单)

✔ 未登录用户提交订单:

  • 手动填写姓名、电话、邮箱等字段

✔ 后台管理要求:

  • 能看到用户是谁
  • 能在订单中保存历史联系方式(即使用户后来修改了个人资料,也不影响订单记录)

所以后台订单中记录的方式必须:

推荐最优设计:采用“双轨制字段”

你需要 两类字段

① 用户关联字段(用于管理与统计)

字段类型说明
order_useruser保存用户 ID(若未登录则为空)
is_guest_ordertrue/false标记是否为游客订单

用户登录下单 → 自动存用户 ID
游客下单 → 为空 + 勾选 is_guest_order

② 订单联系信息字段(无论是否登录都独立保存)

(这是订单快照,防止用户改资料导致订单信息变动)

字段类型
contact_nametext
contact_phonetext
contact_emailtext
contact_notetextarea

为什么必须保留这一套?

因为:

  • 用户未来修改了电话,则订单仍需保留历史电话
  • 管理员也可能需要手动修改订单内的联系方式
  • 登录用户可能帮别人下单(与账户资料不同)

这是行业标准(像 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 LabelField NameType
用户order_userUser
是否为游客订单is_guest_orderTrue/False
订单类型order_typeSelect
订单状态order_statusSelect

(B) 联系方式快照字段(业务级)

Field LabelField NameType
联系姓名contact_nameText
联系电话contact_phoneText
联系邮箱contact_emailEmail
备注contact_noteTextarea

(C) 订单内容字段(原本有的)

Field NameType
goalText
budgetText
domainText

四、前端逻辑建议

如果用户已登录:

获取当前用户资料:

$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系统都是这样)。

评论留言

您的邮箱地址不会被公开。 必填项已用 * 标注