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

WooCommerce邮件技术问题:编辑客户详情及第三方自定义字段显示设置

WooCommerce邮件通知相关问题解决方案

1. 如何编辑WooCommerce邮件通知中的客户详情

编辑邮件里的客户详情,我通常推荐两种实用方式,一种是安全的模板覆盖,另一种是灵活的钩子定制,你可以根据需求选:

方式一:子主题覆盖邮件模板(最稳妥,适合可视化修改)

WooCommerce的所有邮件模板都在插件目录的wp-content/plugins/woocommerce/templates/emails/里,但直接修改插件文件会被版本更新冲掉,所以正确姿势是复制到子主题:

  • 找到你要修改的目标邮件模板,比如客户的订单确认邮件是customer-processing-order.php,管理员新订单邮件是admin-new-order.php
  • 在你的子主题文件夹里创建woocommerce/emails/路径,把目标模板文件复制进去
  • 打开复制后的模板,找到客户详情对应的代码块(一般是调用do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );的地方),直接编辑HTML内容——比如加个自定义标题、调整字段顺序,或者删掉不需要的信息

方式二:用钩子过滤内容(无需改模板,适合动态调整)

如果你不想碰模板代码,用woocommerce_email_customer_details钩子就能轻松添加、修改甚至移除客户详情内容。比如我要在邮件里额外显示客户ID和手机号,代码可以这么写:

add_action( 'woocommerce_email_customer_details', 'customize_my_email_customer_info', 10, 4 );
function customize_my_email_customer_info( $order, $sent_to_admin, $plain_text, $email ) {
    // 要是想移除默认的客户详情,就解开下面这行注释
    // remove_action( 'woocommerce_email_customer_details', 'woocommerce_email_customer_details', 10 );
    
    // 加个自定义标题
    echo '<h2>' . __( '我的专属客户信息', 'woocommerce' ) . '</h2>';
    // 显示客户ID
    echo '<p>' . __( '客户ID:', 'woocommerce' ) . ' ' . $order->get_customer_id() . '</p>';
    // 显示手机号(如果有填写)
    if ( $order->get_billing_phone() ) {
        echo '<p>' . __( '联系电话:', 'woocommerce' ) . ' ' . $order->get_billing_phone() . '</p>';
    }
}

把这段代码贴到子主题的functions.php里,或者用代码片段插件运行就行。


2. 第三方插件自定义字段的引入位置与邮件钩子调整

首先得找到第三方插件的自定义字段存在哪里,然后再调整邮件里的显示顺序,一步步来:

第一步:找到第三方自定义字段的存储位置

第三方插件一般会把自定义字段存在订单的元数据里(也就是wp_postmeta表,因为订单是shop_order自定义文章类型)。找字段名的方法有三个:

  1. 数据库查看:用phpMyAdmin打开wp_postmeta表,搜索对应订单的ID,找带插件前缀的字段(比如_xxx_plugin_custom_field)
  2. 开发者工具:在后台订单编辑页,对着自定义字段输入框右键“检查”,看它的name属性,那就是字段的键名
  3. 代码输出:如果懒得手动找,直接在订单编辑页显示所有元数据,一眼就能看到:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'show_all_order_meta', 10, 1 );
function show_all_order_meta( $order ) {
    echo '<h3>' . __( '所有订单元数据', 'woocommerce' ) . '</h3>';
    foreach ( $order->get_meta_data() as $meta ) {
        echo '<p><strong>' . $meta->key . ':</strong> ' . $meta->value . '</p>';
    }
}

这段代码会在订单的账单地址下方列出所有元数据,找到你要的字段键名就行。

第二步:调整邮件钩子顺序,让客户详情(含自定义字段)显示在订单元数据上方

你要实现和admin-new-order.php一样的效果,让woocommerce_email_customer_details在woocommerce_email_order_meta上方,有三种方案可选:

方案一:调整钩子优先级(无需改模板)

默认情况下,有些邮件模板里woocommerce_email_order_meta的优先级比客户详情高,你可以把它的优先级调低,让客户详情先显示:

// 移除默认的订单元数据钩子
remove_action( 'woocommerce_email_order_details', 'woocommerce_email_order_meta', 30 );
// 重新添加,把优先级设为40(比客户详情的10高,所以会后执行)
add_action( 'woocommerce_email_order_details', 'woocommerce_email_order_meta', 40 );

方案二:把第三方自定义字段加到客户详情钩子里

这样自定义字段会和默认的客户详情一起显示在订单元数据上方,用你找到的字段键名替换下面的_third_party_field:

add_action( 'woocommerce_email_customer_details', 'add_third_party_field_to_email', 15, 4 );
function add_third_party_field_to_email( $order, $sent_to_admin, $plain_text, $email ) {
    $custom_value = $order->get_meta( '_third_party_field' );
    if ( $custom_value ) {
        if ( $plain_text ) {
            // 纯文本邮件的格式
            echo __( '自定义字段:', 'woocommerce' ) . ' ' . $custom_value . "\n";
        } else {
            // HTML邮件的格式
            echo '<p><strong>' . __( '自定义字段:', 'woocommerce' ) . '</strong> ' . $custom_value . '</p>';
        }
    }
}

方案三:直接修改模板的钩子顺序(可视化调整)

要是上面的方法都觉得麻烦,直接用子主题覆盖邮件模板,打开你要修改的模板文件(比如customer-processing-order.php),找到这两行:

do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );

把它们调换顺序,变成:

do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );

这样客户详情就会乖乖显示在订单元数据上方,包括你加的第三方自定义字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:33