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

如何阻止WooCommerce实物订单设为已完成时发送完成邮件(不影响虚拟产品)

解决方案

可以通过添加自定义代码,基于订单内的产品类型控制「订单完成」邮件的发送逻辑,既保留A类虚拟产品的邮件通知,又阻止B类含实物产品的订单在手动标记完成时发送该邮件。

实现代码

将以下代码添加到当前WordPress主题的functions.php文件末尾,或使用代码片段插件(如Code Snippets)管理:

add_filter( 'woocommerce_email_enabled_order_completed', 'disable_completion_email_for_physical_orders', 10, 2 );
function disable_completion_email_for_physical_orders( $enabled, $order ) {
    // 遍历订单内所有商品
    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        // 若存在非虚拟商品(B类订单),禁用邮件发送
        if ( ! $product->is_virtual() ) {
            return false;
        }
    }
    // 所有商品均为虚拟商品(A类订单),允许发送邮件
    return $enabled;
}

代码说明

  • 借助WooCommerce内置的woocommerce_email_enabled_order_completed过滤器,拦截「订单完成」邮件的发送判断流程
  • 遍历订单内的每一件商品,只要检测到非虚拟商品(对应你的B类含实物配送产品),就返回false阻止邮件发送
  • 对于全虚拟商品的订单(你的A类产品),保持默认的启用状态,确保自动完成时正常发送邮件

测试建议

  1. 创建A类虚拟产品订单,确认下单后系统自动标记完成并发送「订单完成」邮件
  2. 创建B类含实物的产品订单,手动添加物流追踪码后标记为已完成,检查是否未发送「订单完成」邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:20:33