You need to enable JavaScript to run this app. WooCommerce 如何用WC_Checkout get_value()获取自定义结账字段值
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce 如何用WC_Checkout get_value()获取自定义结账字段值

问题核心原因

自定义字段无法自动回填、$checkout->get_value('gst_no') 返回null的本质,是WooCommerce默认的会话存储逻辑只会自动收录系统内置的结账字段,你添加的自定义字段没有被纳入整个提交、校验、存会话的流程,提交时输入的值根本没有被写入用户会话,自然无法被读取回填。

实现字段自动回填的完整步骤

按顺序添加以下代码到主题的functions.php即可:

1. 给自定义字段添加提交校验

WooCommerce在处理结账提交时,只有经过合法校验的字段才会被纳入后续流程,否则会被直接过滤丢弃:

add_action( 'woocommerce_checkout_process', 'bbloomer_validate_gst_checkout_field' );
function bbloomer_validate_gst_checkout_field() {
    if ( empty( $_POST['gst_no'] ) ) {
        wc_add_notice( 'GST Number 为必填项', 'error' );
    }
}

2. 核心逻辑:把自定义字段值写入用户会话

WooCommerce的$checkout->get_value()方法,会优先从当前用户会话中读取对应字段的值——这也是系统默认字段能在支付跳转后返回自动填充的原因。需要在用户提交结账时,把自定义字段的值手动写入会话:

add_action( 'woocommerce_checkout_update_session', 'bbloomer_save_gst_value_to_session' );
function bbloomer_save_gst_value_to_session() {
    if ( ! empty( $_POST['gst_no'] ) ) {
        WC()->session->set( 'gst_no', sanitize_text_field( $_POST['gst_no'] ) );
    }
}

3. 把字段值持久化到用户账户

完成会话存储的基础上,可以额外把字段值写入用户账户元数据,让登录用户下次进入结账页时也能自动带出已保存的GST号,不用重复输入:

add_action( 'woocommerce_checkout_update_customer', 'bbloomer_save_gst_value_to_user_meta', 10, 2 );
function bbloomer_save_gst_value_to_user_meta( $customer, $data ) {
    if ( ! empty( $_POST['gst_no'] ) ) {
        update_user_meta( $customer->get_id(), 'gst_no', sanitize_text_field( $_POST['gst_no'] ) );
    }
}
效果验证

完成以上代码添加后,你原来编写的自定义字段渲染代码不需要做任何修改:

  • 当用户输入GST号跳转到支付页、再返回结账页时,自定义字段会和系统默认账单字段一样,自动带出之前输入的内容
  • 你原来添加的调试代码error_log( $checkout->get_value( 'gst_no' ) ) 也会正常打印出用户输入的GST值,不再返回null
  • 登录用户下次进入结账页时,会自动带出之前保存到账户的GST号,无需重复填写

测试前请清空站点缓存、浏览器本地的WooCommerce会话缓存,避免旧的缓存值干扰测试结果。

内容的提问来源于stack exchange,提问作者dc09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 15:54:07