如何在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
相关产品推荐
相关产品推荐

