在 WooCommerce 中,订单的 billing(账单信息)和 shipping(配送信息)默认是必填项,但技术上可以为空,具体取决于你的业务场景和使用方式(例如,你是用代码创建订单,或者某些订单不需要配送)。
以下是 WooCommerce 中有关 billing 和 shipping 信息的规则说明:
✅ 一、通过代码创建订单时
使用 wc_create_order() 创建订单时:
- 可以不设置 billing 和 shipping 信息,WooCommerce 不会报错,订单依然可以保存成功。
- 例如适用于:
- 虚拟商品、数字商品
- 内部订单系统
- 使用第三方支付或线下结算时
php复制编辑$order = wc_create_order();
$order->add_product( $product, 1 );
$order->calculate_totals();
// 不设置 $order->set_address()
// 也不调用 $order->set_billing_* 或 $order->set_shipping_*
$order->save();
结果:
- 订单会创建成功。
- 在后台查看时,billing 和 shipping 区域为空。
⚠️ 二、通过前台结账页时
默认 WooCommerce 结账表单:
- billing 是必填项(如姓名、电话、邮箱)。
- shipping 取决于商品是否需要配送(虚拟商品时可能不显示)。
要允许前台跳过这些字段,需要:
- 自定义 checkout 表单字段验证逻辑。
- 或使用插件隐藏和跳过字段。
✅ 三、订单数据库字段层面
wp_postmeta 中存储的 _billing_* 和 _shipping_* 字段:
- 如果你不设置,它们不会写入数据库。
- WooCommerce 查询这些字段时,结果为
null或空字符串,不影响订单核心功能(如商品、价格、状态)。
✅ 总结
| 场景 | billing/shipping 可为空? | 说明 |
|---|---|---|
| 后台代码创建订单 | ✅ 是 | 不传地址也能成功 |
| 前台结账页(默认) | ❌ 否 | billing 是必填,shipping 取决于商品 |
| 虚拟/下载类商品 | ✅ 是 | 默认不需要配送信息 |
| 插件或自定义接口提交订单 | ✅ 是 | 控制字段验证逻辑即可 |