WooCommerce 2.6.14:钱包充值生成订单邮件致用户困惑求解决
解决WooCommerce 2.6.14钱包充值生成订单并发送邮件的问题
我明白你的困扰——用户把钱包充值当成真实订单,确实会造成不必要的误解。针对WooCommerce 2.6.14这个版本,我们可以通过代码拦截默认订单邮件,甚至替换成更清晰的充值通知,具体方案如下:
核心思路
先识别出哪些订单是「充值订单」,然后禁用这类订单的默认邮件通知(发给用户和管理员的都要禁),如果需要的话,再发送自定义的充值成功提醒。
具体代码实现
把下面的代码添加到你的主题functions.php文件里(或者自定义插件中,避免主题更新丢失代码):
1. 识别充值订单
定义一个函数判断当前订单是否为充值订单,这里假设你用特定产品作为充值入口(比如产品ID是123),你可以根据实际情况调整判断逻辑:
// 判断是否为充值订单 function is_recharge_order( $order_id ) { $order = wc_get_order( $order_id ); if ( ! $order ) return false; // 遍历订单商品,检查是否包含充值产品(替换123为你的充值产品ID) foreach ( $order->get_items() as $item ) { // WooCommerce 2.6版本中获取产品ID的方式 if ( $item['product_id'] == 123 ) { return true; } } // 如果你的充值是通过自定义表单发起的,也可以用自定义元数据判断: // return $order->get_meta( '_is_recharge', true ) == 'yes'; return false; }
2. 禁用充值订单的默认邮件
通过过滤器禁用管理员的新订单邮件,以及用户的订单确认邮件:
// 禁用管理员的充值订单通知邮件 function disable_recharge_admin_email( $enabled, $order ) { if ( is_recharge_order( $order->get_id() ) ) { return false; } return $enabled; } add_filter( 'woocommerce_email_enabled_new_order', 'disable_recharge_admin_email', 10, 2 ); // 禁用用户的充值订单确认邮件(包含处理中、待付款等状态) function disable_recharge_customer_email( $enabled, $order ) { if ( is_recharge_order( $order->get_id() ) ) { return false; } return $enabled; } add_filter( 'woocommerce_email_enabled_customer_on_hold_order', 'disable_recharge_customer_email', 10, 2 ); add_filter( 'woocommerce_email_enabled_customer_processing_order', 'disable_recharge_customer_email', 10, 2 );
3. 可选:发送自定义充值成功邮件
如果你想给用户发送更清晰的充值提醒,可以添加这个函数:
// 发送自定义充值成功邮件 function send_recharge_success_email( $order_id ) { if ( ! is_recharge_order( $order_id ) ) return; $order = wc_get_order( $order_id ); $customer_email = $order->get_billing_email(); $recharge_amount = $order->get_total(); // 自定义邮件内容,你可以根据需求修改 $subject = '您的钱包充值已完成'; $message = "您好,\n\n您的钱包充值操作已成功完成,充值金额为:" . wc_price( $recharge_amount ) . "\n\n您可以登录账户中心查看更新后的钱包余额。\n\n感谢您的支持!"; // 发送邮件 wp_mail( $customer_email, $subject, $message ); } add_action( 'woocommerce_order_status_completed', 'send_recharge_success_email', 10, 1 );
注意事项
- 记得把代码中的
123替换成你实际的充值产品ID,如果是用自定义字段标记订单,就调整is_recharge_order里的判断逻辑。 - 测试时建议用小额充值测试,确保默认邮件不会发送,自定义邮件能正常收到。
- WooCommerce 2.6.14版本较老,部分函数和新版有差异,代码已经适配了这个版本的调用方式。
内容的提问来源于stack exchange,提问作者Chanchal Kumari
相关产品推荐
相关产品推荐

