WooCommerce 新订单电子邮件通知基于国家/地区的不同收件人

Different recipients based on country for WooCommerce new order email notification

我想向不同的收件人发送不同的订单电子邮件:

在 WooCommerce > 包括 > 电子邮件 > class-wc-email-new-order.php 文件,行 不。 110 @version 2.0.0,我修改了以下代码:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

使用此代码:

if ($this->object->shipping_country == 'IL') {
  $this->send( 'abc@example.com', $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
} elseif( $this->object->shipping_country == 'FR' || $this->object->shipping_country == 'BE' || $this->object->shipping_country == 'LU' || $this->object->shipping_country == 'NL' || $this->object->shipping_country == 'IT' || $this->object->shipping_country == 'PT' || $this->object->shipping_country == 'ESP' ) {
  $this->send( 'def@example.com, ghi@example.com', $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
} else {
  $this->send( 'jkl@example.com', $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
}

有效,但我不想更改插件的核心文件。我如何使用钩子来做到这一点?

此外,当送货国家字段为空时,应改用账单国家。

请不要编辑核心文件!

当您修改核心文件时,您 运行 有破坏插件和可能破坏 WordPress 安装的风险。此外,插件开发人员无法为您提供支持,因为他们不知道您所做的更改。

改用 woocommerce_email_recipient_{$email_id} 过滤器复合挂钩,其中 {$email_id} = new_order

所以你得到:

function filter_woocommerce_email_recipient_new_order( $recipient, $order, $email ) {
    // Avoiding backend displayed error in WooCommerce email settings
    if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
    
    // Get shipping country
    $country = $order->get_shipping_country();

    // When empty
    if ( empty( $country ) ) {
        // Get billing country
        $country = $order->get_billing_country();
    }

    // Checks if a value exists in an array
    if ( in_array( $country, array( 'IL' ) ) ) {
         $recipient = 'abc@example.com';    
    } elseif ( in_array( $country, array( 'FR', 'BE', 'LU', 'NL', 'IT', 'PT', 'ESP' ) ) ) {
        $recipient = 'def@example.com, ghi@example.com';
    } else {
        $recipient = 'jkl@example.com';
    }

    return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'filter_woocommerce_email_recipient_new_order', 10, 3 );