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

仅针对虚拟订单禁用WooCommerce订单处理邮件的问题求助

解决方案:阻止WooCommerce向全虚拟/可下载商品订单发送处理邮件

问题分析

  1. 第一段代码报错原因:

    • remove_action调用逻辑错误,woocommerce_order_status_processing_notification的触发对象并非$order->get_email_recipients(),直接移除动作会干扰结账流程的正常执行。
    • 选择woocommerce_order_status_processing钩子的时机不适合做邮件禁用操作,容易引发流程冲突。
  2. 第二段代码无效原因:

    • 在woocommerce_thankyou钩子中添加邮件禁用过滤器的时机过晚,订单处理邮件的发送逻辑已经提前执行,过滤器无法生效。

可行代码实现

以下代码可精准实现需求:自动完成全虚拟/可下载商品订单,并禁用对应订单的处理邮件发送

// 自动完成仅含虚拟/可下载商品的订单
add_action( 'woocommerce_order_status_processing', 'auto_complete_virtual_downloadable_orders', 10, 2 );
function auto_complete_virtual_downloadable_orders( $order_id, $order ) {
    $only_virtual = true;

    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        if ( $product && ( !$product->is_virtual() && !$product->is_downloadable() ) ) {
            $only_virtual = false;
            break;
        }
    }

    if ( $only_virtual ) {
        $order->update_status( 'completed' );
    }
}

// 禁用仅含虚拟/可下载商品订单的处理邮件
add_filter( 'woocommerce_email_enabled_customer_processing_order', 'disable_processing_email_for_virtual_orders', 10, 2 );
function disable_processing_email_for_virtual_orders( $enabled, $order ) {
    if ( !$order ) return $enabled;

    $only_virtual = true;

    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        if ( $product && ( !$product->is_virtual() && !$product->is_downloadable() ) ) {
            $only_virtual = false;
            break;
        }
    }

    return $only_virtual ? false : $enabled;
}

代码说明

  • auto_complete_virtual_downloadable_orders:在订单进入处理状态时,遍历所有商品判断是否仅含虚拟/可下载类型,若是则自动将订单标记为完成状态。
  • disable_processing_email_for_virtual_orders:通过WooCommerce官方提供的邮件启用过滤器,直接返回false禁用符合条件订单的处理邮件发送,逻辑完全贴合WooCommerce原生机制,不会引发流程错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:43:13