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

WooCommerce自定义订单状态:仅发自定义邮件而非默认处理邮件

解决方案

方案一:仅发送自定义邮件,禁用默认处理邮件

通过WooCommerce的邮件启用钩子,判断订单是否包含目标商品,若包含则关闭默认的处理状态邮件,只保留自定义邮件的触发逻辑。

将以下代码添加到主题的functions.php文件或自定义插件中:

add_filter('woocommerce_email_enabled_customer_processing_order', 'disable_default_processing_email_for_specific_items', 10, 2);
function disable_default_processing_email_for_specific_items($enabled, $order) {
    // 替换为你的目标商品ID,多个商品用数组格式,比如 array(123, 456)
    $target_product_ids = array(123);
    
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        if (in_array($product_id, $target_product_ids)) {
            // 检测到目标商品,禁用默认处理邮件
            return false;
        }
    }
    // 无目标商品,保持默认设置
    return $enabled;
}

这段代码会在订单包含指定商品时,关闭默认的客户处理状态邮件,只触发你自定义的邮件逻辑。

方案二:修改默认处理邮件收件人,且不影响自定义邮件

如果需要保留默认处理邮件但修改收件人,同时确保自定义邮件正常发送,可使用收件人过滤钩子,通过商品判断来修改收件地址:

add_filter('woocommerce_email_recipient_customer_processing_order', 'change_processing_email_recipient_for_specific_items', 10, 2);
function change_processing_email_recipient_for_specific_items($recipient, $order) {
    // 替换为你的目标商品ID
    $target_product_ids = array(123);
    // 替换为你需要的收件邮箱
    $custom_recipient = 'new-email@example.com';
    
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        if (in_array($product_id, $target_product_ids)) {
            // 检测到目标商品,替换收件人
            return $custom_recipient;
        }
    }
    // 无目标商品,保留原收件人
    return $recipient;
}

当订单包含指定商品时,默认处理邮件会发送到你设置的新地址,同时自定义邮件也会正常触发。

注意事项

  • 请将代码中的$target_product_ids替换为实际需要监控的商品ID,$custom_recipient替换为目标邮箱。
  • 如果你的自定义邮件触发逻辑依赖订单状态变更(比如设置为自定义状态时触发),请确保状态变更代码未与默认处理状态的触发逻辑绑定,若相关代码缺失,可补充后进一步调整。

内容的提问来源于stack exchange,提问作者Denzel van de Graaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:13:16