WooCommerce 新订单电子邮件通知基于国家/地区的不同收件人
Different recipients based on country for WooCommerce new order email notification
我想向不同的收件人发送不同的订单电子邮件:
- 如果送货国家是以色列,它的电子邮件收件人应该是 abc@example.com
- 如果是法国、西班牙、意大利等,收件人应该是def@example.com和ghi@example.com
- 否则应该是jkl@example.com
在 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 );
我想向不同的收件人发送不同的订单电子邮件:
- 如果送货国家是以色列,它的电子邮件收件人应该是 abc@example.com
- 如果是法国、西班牙、意大利等,收件人应该是def@example.com和ghi@example.com
- 否则应该是jkl@example.com
在 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 );