Disable order processing email for virtual products only in WooCommerce

Disable order processing email for virtual products only in WooCommerce on child sites.

Snippet Type

Execute on Child Sites

Snippet

add_action( 'woocommerce_checkout_process', 'wc_custom_checkout_process_for_virtual_products' );

function wc_custom_checkout_process_for_virtual_products() {

    // Check if the cart contains virtual products only
    $virtual_products_only = true;
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( ! $cart_item['data']->is_virtual() ) {
            $virtual_products_only = false;
            break;
        }
    }

    // If the cart contains virtual products only, remove email notifications
    if ( $virtual_products_only ) {
        add_action( 'woocommerce_email', 'unhook_those_pesky_emails' );
        function unhook_those_pesky_emails( $email_class ) {
            remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_New_Order'], 'trigger' ) );
            remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
        }
    }
}

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.