
文章目录
结论先行
2026 年 WooCommerce 结账页定制应优先使用结账区块,通过 woocommerce_checkout_fields 钩子精简字段,并用浏览器与订单日志验证。判断做对的标准是:必填项只剩必要信息、下单成功率回归正常、回滚只需注释代码或切回短代码模式。
结账区块与短代码两种模式
WooCommerce 在 2026 年同时支持两种结账呈现方式。旧方式是短代码 [woocommerce_checkout],插入任意页面即可渲染传统 PHP 模板结账表单;新方式是 Gutenberg 结账区块(Checkout block),由 WooCommerce Blocks 提供,走 Store API 与 React 渲染,是官方主推方向。
如何判断当前站点用哪种
进入 WordPress 后台「页面」,编辑结账页。若正文里有 <!-- wp:woocommerce/checkout --> 之类的区块注释,就是区块模式;若正文只有 [woocommerce_checkout],就是短代码模式。也可在数据库查 wp_posts 表的 post_content 字段确认。
两种模式对定制的影响
短代码模式可直接用传统钩子改字段与模板文件;区块模式下部分 PHP 钩子仍生效于 Store API 数据层,但模板覆盖要改用区块样式与 woocommerce_blocks 相关扩展点。2026 年新项目建议直接用区块,老站迁移前先备份。
如果你正在规划新的外贸成交站点,可参考 外贸独立站与 WooCommerce 建站 的服务方案,从结账链路一开始就按区块模式设计。
实施步骤与操作流程
获取报价
邮箱 + 需求 + 预算区间,24 小时内回复报价。
- 备份:导出数据库并对主题子目录做版本快照,命令
wp db export backup-2026.sql。 - 确认模式:按上一节方法判断是区块还是短代码,记录结果。
- 加钩子代码:在子主题
functions.php写入woocommerce_checkout_fields过滤逻辑(见下一节)。 - 删减字段:移除公司名、地址二行等非必要项,保存后清缓存。
- 验证:用测试网关下一单,检查字段与订单详情是否一致。
- 回滚预案:注释代码或把页面切回
[woocommerce_checkout]短代码即可恢复。
woocommerce_checkout_fields 钩子
woocommerce_checkout_fields 是 WooCommerce 暴露给开发者修改结账字段的核心过滤器。它接收一个包含 billing、shipping、account、order 四组字段的数组,返回修改后的数组。
可复制代码块
把下面代码放进子主题 functions.php,用于移除公司名与地址第二行,并把邮编改为非必填:
add_filter( 'woocommerce_checkout_fields', 'runok_custom_checkout_fields' );
function runok_custom_checkout_fields( $fields ) {
unset( $fields['billing']['billing_company'] );
unset( $fields['billing']['billing_address_2'] );
$fields['billing']['billing_postcode']['required'] = false;
return $fields;
}
为什么这样写
unset 直接删除整组配置,比仅设 required=false 更彻底;改 required 则保留字段但不强制。注意数组键名必须写对,2026 年 WooCommerce 9.x 仍沿用这套键名,可参考 WordPress 开发者文档 的钩子索引。
减少不必要的字段
结账转化率与字段数成反比。2026 年实测,每多一个必填输入框就多一分放弃风险。除上节代码外,还可去掉「电话号码」以外的备用联系项、订单备注里的冗余说明。
按场景裁剪清单
- 虚拟商品:删 shipping 整组,用
unset($fields['shipping'])。 - 本地自提:删国家与州省选择,保留城市与地址一。
- 已登录会员:用
woocommerce_checkout_get_value预填,减少输入。
验证是否删干净
前台结账页刷新后,应看不到被删字段;随便填剩余项提交,订单详情里也不出现空的公司名记录。用浏览器开发者工具看表单 name 属性是否消失,是最快验证法。
下单失败排查流程

- 开日志:WooCommerce > 设置 > 支付,启用调试模式,或查
wp-content/uploads/wc-logs/。 - 看返回:提交失败时读 Store API 或传统 AJAX 的 JSON 错误节点。
- 查必填:确认没误删支付网关要求的字段(如某些网关强制要电话)。
- 测网关:切到「货到付款」测试,排除支付插件问题。
- 回滚:注释 functions.php 里新增的钩子,恢复默认字段再试。
- 留证:把失败请求体与日志片段存档,便于二次比对。
常见踩坑
区块模式下直接改 form-checkout.php 模板无效,因为不走那个 PHP 文件;短代码模式则相反。另一个坑是删了网关依赖字段却不自知,导致「下单失败」却只在日志里看到模糊的 missing_parameter。
更多建站底层结构问题,可阅读 技术栏目首页 的专题文章,或结合 2026年WordPress如何建站:服务商对比与决策指南 梳理服务器与代码层的边界。
常见问题
结账区块和短代码能混用吗?
不能同页混用。一个页面只能选一种,混用会白屏或丢字段,回滚就是换回另一种写法。
删字段后老订单数据会丢吗?
不会。历史订单元字段仍在库里,只是新单不再写入,回滚后新单恢复记录。
2026 年还需要改 form-checkout.php 吗?
仅短代码模式需要;区块模式请改区块模板或 Store API 数据,不要动那个 PHP 文件。
动作清单
- 今天备份数据库并确认结账页是区块还是短代码模式。
- 把本文的
woocommerce_checkout_fields代码贴进子主题并按需裁剪字段。 - 用测试网关走一遍下单,核对订单详情与前台字段一致。
- 开启支付日志,模拟失败场景并留存排查记录。
- 写好回滚注释,一旦异常 30 秒内恢复原状。
需要专业落地?查看 外贸独立站与 WooCommerce 建站 服务,我们提供结账链路优化与运维支持。
