如何在WooCommerce客户处理中订单邮件按支付方式添加自定义消息
WooCommerce邮件按支付方式展示自定义内容修正方案
你提供的代码存在几处参数调用和WooCommerce规范兼容问题,以下是可直接使用的修正代码:
add_action( 'woocommerce_email_before_order_table', 'bbloomer_add_content_specific_email', 20, 4 ); function bbloomer_add_content_specific_email( $order, $sent_to_admin, $plain_text, $email ) { // 仅在客户待处理订单邮件中展示内容 if ( $email->id == 'customer_processing_order' ) { // 直接用订单对象方法获取支付方式,无需额外查自定义字段 $payment_method = $order->get_payment_method(); switch ($payment_method) { case 'bacs': echo '<p>自定义文本1</p>'; break; case 'wocommerce_yape_peru': echo '<p>自定义文本2</p>'; break; case 'woo-mercado-pago-custom': echo '<p>自定义文本3</p>'; break; // 可按需添加更多支付方式分支 default: // 其他支付方式可留空或输出通用内容 break; } } }
主要修改说明:
- 移除了多余的
$order_id参数:woocommerce_email_before_order_table钩子默认仅传递4个参数,额外添加的第5个参数无法获取到有效值,是原代码失效的核心原因 - 删掉了冗余的重复逻辑:钩子已经返回了有效的订单对象,不需要再通过订单ID重复调用
wc_get_order获取订单 - 替换了废弃的属性调用方式:原代码直接调用
$order->id、$order->billing_first_name等属性属于WooCommerce已废弃的用法,高版本中推荐使用对应的get_开头方法获取数据,兼容性更强 - 简化了支付方式获取逻辑:直接调用订单对象的
get_payment_method()方法即可获取支付方式标识,不需要手动查询post_meta
如果需要调整展示的邮件类型,修改$email->id的判断值即可,常见的邮件ID还有customer_completed_order(订单完成邮件)、customer_on_hold_order(订单搁置邮件)等。
内容的提问来源于stack exchange,提问作者Greg Minaya
相关产品推荐
相关产品推荐

