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

如何在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);

关键说明

  1. 接收钩子参数:woocommerce_email_order_details钩子默认传递4个参数,其中第一个就是订单对象$order,需在函数中声明接收该参数。
  2. 使用订单方法:调用$order->get_formatted_order_total()可直接获取带货币符号的格式化总额,无需手动拼接货币单位,适配多货币场景。
  3. 调整优先级:将钩子优先级设为15,确保在移除订单详情的函数(优先级5)之后执行,避免内容冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:55:07