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
相关产品推荐
相关产品推荐

