仅针对虚拟订单禁用 woocommerce 订单处理电子邮件

问题描述 投票:0回答:0

我正在尝试利用下面的代码来阻止 woocommerce 仅发送虚拟产品的订单处理电子邮件。

function disable_virtual_order_emails( $order ) {
    $order_items = $order->get_items();
    foreach ( $order_items as $order_item ) {
        $product = $order_item->get_product();
        if ( $product && $product->is_virtual() ) {
            // If the order contains a virtual product, remove the order processing email
            remove_action( 'woocommerce_order_status_processing_notification', array( $order->get_email_recipients(), 'trigger' ) );
            break;
        }
    }
}
add_action( 'woocommerce_order_status_processing', 'disable_virtual_order_emails' );

但是结帐时出现错误

错误处理结帐。请重试。

我尝试启用调试并将其打印到屏幕以查看实际错误是什么,但是它没有显示任何内容。

我还在这个 thread 的 stackoverflow 上找到了这段代码:

add_action('woocommerce_thankyou', 'wpd_autocomplete_virtual_orders', 10, 1 );
function wpd_autocomplete_virtual_orders( $order_id ) {
 

        if( ! $order_id ) return;
     
        // Get order
        $order = wc_get_order( $order_id );
     
        // get order items = each product in the order
        $items = $order->get_items();
     
        // Set variable
        $only_virtual = true;
     
        foreach ( $items as $item ) {
             
            // Get product id
            $product = wc_get_product( $item['product_id'] );
     
            // Is virtual
            $is_virtual = $product->is_virtual();
     
            // Is_downloadable
            $is_downloadable = $product->is_downloadable();
     
            if ( ! $is_virtual && ! $is_downloadable  ) {
     
                $only_virtual = false;
     
            }
     
        }
     
        // true
        if ( $only_virtual ) {
     
            wp_update_post(['ID' => $order_id, 'post_status' => 'wc-completed']);
            add_filter( 'woocommerce_email_enabled_customer_processing_order', '__return_false' );
     
        }
    }

然而,那里的建议似乎也没有解决问题。订单确实被标记为完成,但订单处理电子邮件仍然通过。

一些帮助使这个工作或任何其他可以实现这个的代码将不胜感激。

谢谢!

woocommerce
© www.soinside.com 2019 - 2024. All rights reserved.