如何在WooCommerce邮件通知中显示订单总额(B2B场景)
WooCommerce邮件通知优化:移除订单详情并统一显示订单总额
问题背景
基于WordPress搭建的B2B电商平台,需调整用户下单后的邮件通知:移除冗长的商品订购列表,仅保留订单总额。目前已通过@LoicTheAztec的方案成功移除订单详情,但添加订单总额的代码仅在订单确认邮件中有效,发送订单取消邮件时因购物车数据已不存在,无法显示总额。尝试调用WC_Order相关方法获取订单对象及总额未果,寻求可行解决方案。
当前使用代码
移除订单详情代码
function pkdb2b_remove_order_details_from_emails(){ $mailer = WC()->mailer(); remove_action('woocommerce_email_order_details', array($mailer, 'order_details'), 10); } add_action('woocommerce_email_order_details','pkdb2b_remove_order_details_from_emails', 5, 4);
添加订单总额代码(仅订单确认邮件有效)
function pkdb2b_add_cart_total_email(){ $cart_total = WC()->cart->cart_contents_total; echo "<p> Votre Commande montant Total = <strong>".$cart_total." DT</strong> est bien reçue</p>"; } add_action('woocommerce_email_order_details','pkdb2b_add_cart_total_email', 5, 4);
解决方案
问题核心在于原代码依赖WC()->cart获取总额,而订单取消时购物车数据已清空。需改用钩子传递的**订单对象($order)**来获取总额,该对象在所有订单相关邮件中均存在。
修正后的添加总额代码
function pkdb2b_add_cart_total_email( $order, $sent_to_admin, $plain_text, $email ) { // 通过订单对象获取已格式化的总额(含货币符号) $order_total = $order->get_formatted_order_total(); // 输出自定义内容 echo "<p> Votre Commande montant Total = <strong>{$order_total}</strong> est bien reçue</p>"; } // 调整优先级为15,确保在移除详情后执行 add_action('woocommerce_email_order_details','pkdb2b_add_cart_total_email', 15, 4);
关键说明
- 接收钩子参数:
woocommerce_email_order_details钩子默认传递4个参数,其中第一个就是订单对象$order,需在函数中声明接收该参数。 - 使用订单方法:调用
$order->get_formatted_order_total()可直接获取带货币符号的格式化总额,无需手动拼接货币单位,适配多货币场景。 - 调整优先级:将钩子优先级设为15,确保在移除订单详情的函数(优先级5)之后执行,避免内容冲突。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

