You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce自定义字段未在邮件及后台订单信息中显示

嘿,我帮你捋捋这个WooCommerce自定义字段的问题!你说加了customer-id字段,结账时能用,但邮件里没它,后台订单页也看不到——这大概率是因为你只做了「显示字段」这一步,没把数据存进订单元数据,也没配置后台和邮件的显示逻辑。咱们一步步来修复:

修复WooCommerce自定义字段不显示在邮件和后台的问题

1. 先把字段数据存进订单元数据

你之前的代码可能只实现了结账页显示字段,但没把用户输入的内容保存到订单里。加上这段代码,确保数据能和订单绑定:

/**
 * 保存自定义字段到订单元数据
 */
add_action('woocommerce_checkout_update_order_meta', 'save_my_custom_checkout_field');
function save_my_custom_checkout_field($order_id) {
    if (!empty($_POST['customer_id'])) {
        update_post_meta($order_id, '_customer_id', sanitize_text_field($_POST['customer_id']));
    }
}

⚠️ 注意:这里的$_POST['customer_id']要和你结账字段的name属性完全一致,_customer_id是订单元数据的键名(前面加下划线是WooCommerce的惯例,用来区分默认字段)。

2. 让字段显示在后台订单详情页

添加这段代码,把Customer ID放到后台订单的账单地址下方,管理员一眼就能看到:

/**
 * 在后台订单详情页显示自定义字段
 */
add_action('woocommerce_admin_order_data_after_billing_address', 'display_my_custom_field_in_admin', 10, 1);
function display_my_custom_field_in_admin($order) {
    $customer_id = get_post_meta($order->get_id(), '_customer_id', true);
    if (!empty($customer_id)) {
        echo '<div class="form-field form-field-wide">
                <strong>Customer ID:</strong> ' . esc_html($customer_id) . '
              </div>';
    }
}

3. 把字段加到订单确认邮件里

用这个钩子,让字段出现在给客户和管理员的所有订单通知邮件中:

/**
 * 给订单邮件添加自定义字段
 */
add_filter('woocommerce_email_order_meta_fields', 'add_my_custom_field_to_emails', 10, 3);
function add_my_custom_field_to_emails($fields, $sent_to_admin, $order) {
    $customer_id = get_post_meta($order->get_id(), '_customer_id', true);
    if (!empty($customer_id)) {
        $fields['_customer_id'] = array(
            'label' => __('Customer ID', 'woocommerce'),
            'value' => esc_html($customer_id),
        );
    }
    return $fields;
}

最后检查原有代码

确认你之前添加结账字段的代码里,输入框的name属性是customer_id,比如:

function my_custom_checkout_field() {
    echo '<div id="my_custom_checkout_field">
            <h3>' . __('Customer ID', 'woocommerce') . '</h3>
            <p class="form-row form-row-wide">
                <label for="customer_id">' . __('请输入你的客户ID', 'woocommerce') . '<span class="required">*</span></label>
                <input type="text" class="input-text" name="customer_id" id="customer_id" value="' . esc_attr($_POST['customer_id'] ?? '') . '" />
            </p>
          </div>';
}

如果name不对,前面的保存代码就抓不到用户输入的值,这是很容易踩的小坑。

把这些代码加到主题的functions.php里,或者用自定义代码插件(比如Code Snippets)来添加,避免主题更新丢失代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:14:02