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

如何在WooCommerce发票及通知邮件中使用账户信息替代账单信息

解决WooCommerce订单邮件中显示实际选课人姓名的问题

针对员工用个人信息注册账户、雇主支付账单的场景,要在客户邮件和管理员订单通知里用账户的first_name/last_name替代或补充账单姓名,这里提供两种可行方案:

方案一:直接替换邮件中的账单姓名

通过WooCommerce的订单属性过滤钩子,仅在邮件生成时将账单姓名替换为下单用户的账户姓名,不影响后台订单显示。

将以下代码添加到主题的functions.php文件或自定义插件中:

// 在WooCommerce邮件中替换账单姓名为账户姓名
add_filter( 'woocommerce_order_get_billing_first_name', 'replace_billing_name_with_account_name_in_emails', 10, 2 );
add_filter( 'woocommerce_order_get_billing_last_name', 'replace_billing_name_with_account_name_in_emails', 10, 2 );

function replace_billing_name_with_account_name_in_emails( $value, $order ) {
    // 仅在邮件环境且订单关联用户时生效
    if ( ! is_email() || ! $order->get_user_id() ) {
        return $value;
    }

    $user = get_user_by( 'id', $order->get_user_id() );
    if ( ! $user ) {
        return $value;
    }

    // 根据当前过滤字段返回对应账户姓名,无值则保留原账单姓名
    return current_filter() === 'woocommerce_order_get_billing_first_name' 
        ? ( $user->first_name ?: $value ) 
        : ( $user->last_name ?: $value );
}

方案二:补充显示实际选课人信息

如果需要保留雇主的账单信息,同时额外显示选课人姓名,可以在邮件中添加专属字段:

// 管理员新订单邮件添加选课人信息
add_action( 'woocommerce_email_before_order_table', 'add_learner_info_to_admin_email', 10, 4 );
// 客户订单邮件添加选课人信息
add_action( 'woocommerce_email_before_order_table', 'add_learner_info_to_customer_email', 10, 4 );

function add_learner_info_to_admin_email( $order, $sent_to_admin, $plain_text, $email ) {
    // 仅针对管理员新订单邮件生效
    if ( $email->id !== 'new_order' || ! $order->get_user_id() ) {
        return;
    }

    $user = get_user_by( 'id', $order->get_user_id() );
    if ( $user ) {
        echo '<p><strong>实际选课人:</strong> ' . esc_html( $user->first_name . ' ' . $user->last_name ) . '</p>';
    }
}

function add_learner_info_to_customer_email( $order, $sent_to_admin, $plain_text, $email ) {
    // 针对客户处理中/完成订单邮件生效
    $target_emails = [ 'customer_processing_order', 'customer_completed_order' ];
    if ( ! in_array( $email->id, $target_emails ) || ! $order->get_user_id() ) {
        return;
    }

    $user = get_user_by( 'id', $order->get_user_id() );
    if ( $user ) {
        echo '<p><strong>选课人姓名:</strong> ' . esc_html( $user->first_name . ' ' . $user->last_name ) . '</p>';
    }
}

注意事项

  • 不要直接修改WooCommerce核心文件或默认模板,避免版本升级时丢失修改。
  • 代码添加前建议备份主题文件,测试环境验证后再部署到生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:14