Avoid customer email notification for a specific product category in Woocommerce

前端 未结 1 1547
失恋的感觉
失恋的感觉 2021-01-16 06:06

In Woocommerce, I am trying to stop customer order email for a particular product category in woocommerce.

What I have tried is:

add_filter(\'woocomm         


        
相关标签:
1条回答
  • 2021-01-16 07:00

    You should try this instead (with has_term() WP conditional function):

    add_filter( 'woocommerce_email_recipient_customer_processing_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
    function product_cat_avoid_processing_email_notification( $recipient, $order ) {
        if( is_admin() ) return $recipient;
    
        // HERE set your product categories (coma separated term Ids, slugs or names)
        $product_categories = array( 10 );
    
        // Loop through order items
        foreach ( $order->get_items() as $item ) {
            // Get an instance of the WC_Product object
            $product = $item->get_product(); 
            // Get the correct product ID (for variations we take the parent product ID)
            $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
    
            // Check for product categories for this item
            if( has_term( $product_categories, 'product_cat', $product_id ) )
                return ''; // If it's found, we return an empty recipient
        }
        return $recipient;
    }
    

    This code goes on function.php file of your active child theme (or theme). Tested and works.

    This will avoid only Customer "processing" order email notification.

    For Others customer order email notification, you will have to add also:

    // Customer "completed" Order email notification
    add_filter( 'woocommerce_email_recipient_customer_completed_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
    
    // Customer "on-hold" Order email notification
    add_filter( 'woocommerce_email_recipient_customer_on_hold_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
    
    // Customer "refunded" Order email notification
    add_filter( 'woocommerce_email_recipient_customer_refunded_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
    
    // Customer "invoice" email notification
    add_filter( 'woocommerce_email_recipient_customer_invoice', 'product_cat_avoid_processing_email_notification', 10, 2 );
    

    • How to get WooCommerce order details
    • Get Order items and WC_Order_Item_Product in Woocommerce 3
    • Wordpress has_term() function (for custom taxonomy as a conditional tag)
    0 讨论(0)
提交回复
热议问题