Woocommerce - Need to send email to specific address based on zip code

前端 未结 2 662
孤街浪徒
孤街浪徒 2020-12-18 13:32

Basically, in woocommerce you have the option to input multiple email addresses (separated by commas) of who to send the completed order to, in WooCommerce -> Settings -> Em

相关标签:
2条回答
  • 2020-12-18 13:42

    Each email has a filter that allows you to adjust the recipients of that email. The filter name is essentially woocommerce_email_recipient_{$email_id}.

    So the following would filter the "to" addresses for the "new_order" email.

    add_filter( 'new_order' , 'so_26429482_add_recipient', 20, 2 );
    function so_26429482_add_recipient( $email, $order ) {
        $additional_email = "somebody@somewhere.net";
        if( $order->shipping_postcode == "90210" ){
            $email = explode( ',', $email );
            array_push( $email, $additional_email );
        }
        return $email;
    }
    

    I'm not 100% certain on the conditional logic, but I think that should check the shipping zip code and subsequently send to the additional email address.

    0 讨论(0)
  • 2020-12-18 13:46

    I had a bit of trouble with helgatheviking's answer above and also a slightly different use case. My problems/needs were:

    • I didn't quite understand the filter name as presented above.
    • The public function get_recipient() inside of class-wc-email.php expected a string but was getting an array.
    • A also wanted to conditionally add the extra recipient based on the payment method, rather than postcode.

    Here's what I did instead:

    • Added full filter name, not just the suffix: woocommerce_email_recipient_new_order
    • Replaced explode() and array_push() with string concatenation $email .= ',' . $additional_email;.
    • Conditionally checked payment method: if( $order->get_payment_method() == "cod" ).

    Full example:

    add_filter( 'woocommerce_email_recipient_new_order' , 'so_26429482_add_recipient', 20, 2 );
    function so_26429482_add_recipient( $email, $order ) {
    
        // !empty($order) prevents a fatal error in WooCommerce Settings
        // !empty($email) prevents the duplicate email from being sent in cases where the filter is run outside of when emails are normally sent. In my case, when using https://wordpress.org/plugins/woo-preview-emails/
        if(!empty($order) && !empty($email)) {
        
            $additional_email = "isf@domain.co";
        
            if( $order->get_payment_method() == "cod" ) {
                $email .= ',' . $additional_email;
            } else {
                $email .= ',another@domain.co';
            }
        
        }
        return $email;
    }
    
    0 讨论(0)
提交回复
热议问题