You need to enable JavaScript to run this app. WooCommerce更新后自定义账单字段(IVA等)不显示于感谢页、客户邮件的问询
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce更新后自定义账单字段(IVA等)不显示于感谢页、客户邮件的问询

核心失效原因排查
  • 此前使用的代码依赖WooCommerce 3.0版本后已废弃的$order->id类属性,受类访问保护限制,外部直接读取该属性会返回空值,导致无法正常查询到自定义字段的存储值,所有代码逻辑实际没有拿到有效运行的数据。
  • 未针对结账完成感谢页(订单接收页)的展示逻辑挂载对应钩子,默认页面模板仅渲染WooCommerce内置的账单字段,自定义字段不会自动出现在页面上。
  • 未核对Checkout Manager插件实际存储的自定义字段meta key:插件版本更新或字段重新生成后,默认key的后缀数字可能发生变化,凭旧配置记忆填写的key和数据库实际存储值不匹配。
分步修复方案

1. 前置校验操作

  • 找到已提交的测试订单,进入订单编辑页面,通过页面自定义字段区域查看IVA号、组织号两个字段真实存储的meta key和对应值,确认字段值已正常写入订单元数据,记下正确的meta key用于替换代码中的示例值。
  • 进入WooCommerce设置-邮件配置页,确认「显示订单元数据」开关处于开启状态,避免自定义邮件模板拦截元数据渲染。

2. 订单通知邮件的自定义字段显示修复

移除此前添加的两段失效钩子代码,将以下适配新版本WooCommerce的代码放置到子主题functions.php文件中:

add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    // 替换为你实际确认的两个自定义字段meta key和对应展示标签
    $custom_fields_config = [
        'billing_wooccm13' => 'Moms/IVA号',
        'billing_wooccm14' => '组织号'
    ];

    foreach( $custom_fields_config as $meta_key => $label ) {
        $field_value = $order->get_meta( $meta_key );
        if( !empty( $field_value ) ) {
            $fields[ $meta_key ] = [
                'label' => __( $label, 'woocommerce' ),
                'value' => $field_value
            ];
        }
    }
    return $fields;
}

代码说明:

  • 采用WooCommerce新版本官方推荐的$order->get_meta()方法读取字段值,替代此前失效的get_post_meta($order->id, ...)组合,消除类属性访问的兼容性问题。
  • 该钩子的覆盖范围包含所有邮件的元数据展示区,同时适配管理员新订单邮件、客户订单确认/更新邮件的渲染逻辑,无需重复挂载冗余钩子。
  • 内置空值判断,未填写的字段不会在邮件中渲染空白占位。

3. 结账感谢页的自定义字段显示修复

添加以下钩子代码,将自定义字段注入到感谢页的订单详情展示区:

add_filter( 'woocommerce_order_details_after_order_table', 'show_custom_fields_on_order_received_page', 10, 1 );
function show_custom_fields_on_order_received_page( $order ) {
    // 和邮件配置保持一致的字段key和标签
    $custom_fields_config = [
        'billing_wooccm13' => 'Moms/IVA号',
        'billing_wooccm14' => '组织号'
    ];

    $output = '<div class="custom-billing-info"><h3>账单补充信息</h3>';
    foreach( $custom_fields_config as $meta_key => $label ) {
        $field_value = $order->get_meta( $meta_key );
        if( !empty( $field_value ) ) {
            $output .= '<p><strong>' . __( $label, 'woocommerce' ) . ':</strong>' . esc_html( $field_value ) . '</p>';
        }
    }
    $output .= '</div>';
    echo $output;
}

代码说明:

  • 渲染位置在感谢页基础订单信息模块下方,和账单信息模块保持统一布局逻辑。
  • 同样内置空值判断,避免无值的字段展示空白内容。

调试校验步骤

  • 保存代码后,重新生成一笔测试订单,依次检查感谢页、客户通知邮件中的自定义字段展示效果。
  • 如果字段值依然不显示,临时在函数中打印对应meta key的返回值:如果返回空值,回到前置校验步骤核对真实的存储key,确认没有拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 08:36:01