向相关经理发送 WooCommerce 新订单电子邮件通知
Sending WooCommerce new order email notification to related managers
所以,网站是这样设置的:
有 2 种类型的角色,1 种下订单(客户),1 种处理订单(经理)。
这些可以分为多个组,每个组都有自己的客户和经理(每个可能的多个)。
经理们需要收到他们组内新订单的通知,并且为了支付假期和病假,每个经理都会收到他们组内的每一个订单。
我已经到了经理收到新订单电子邮件的地步,但是,他们多次收到邮件。发送的重复邮件数量与添加到收件人列表中的电子邮件数量相同,我这辈子都搞不清楚原因。
代码:
// Send mail to Manager on new order
add_filter('woocommerce_email_recipient_new_order', 'my_new_order_email_recipient', 10, 2);
function my_new_order_email_recipient($recipient, $order) {
$find_manager_args = array(
'role' => 'manager',
);
$find_manager_query = new WP_User_Query($find_manager_args);
$users = $find_manager_query->get_results();
$new_recipient = '';
if (!empty($users)) {
foreach ($users as $user1) {
if (get_user_meta(get_current_user_id(), 'group_meta_key', TRUE) === get_user_meta($user1->id, 'group_meta_key', TRUE)) {
if (isset($new_recipient) && !empty($new_recipient)) {
$new_recipient = "$new_recipient,";
}
$user_info = get_userdata($user1->ID);
$new_recipient .= $user_info->user_email;
}
}
}
else {
$new_recipient = get_option('admin_email');
}
return $new_recipient;
}
我发现的一切都和我拥有的完全一样。逗号分隔的地址列表应该有效。
没有支付系统,所以没有外部触发器。通过在组中添加和删除经理进行测试,重复项的数量随之变化。
我将不胜感激,因为它困扰了我好几天了。
首先,您无法在电子邮件通知中获取当前用户 ID,因为它是一个后台进程。使用WC_Order
方法get_customer_id()
.
可以得到的是订单所属的客户ID
现在您收到重复的电子邮件,因为您的代码中存在一些错误,可以简化这些错误。
我想 "manager" 是一个 自定义用户角色 ,因为 WooCommerce 使用 "shop_manager"
所以试试下面的方法:
// Send mail to Manager on new order
add_filter('woocommerce_email_recipient_new_order', 'my_new_order_email_recipient', 10, 2);
function my_new_order_email_recipient( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) )
return $recipient;
$customer_id = $order->get_customer_id();
$customer_group = get_user_meta( $customer_id, 'group_meta_key', true );
$manager_emails = [];
// Get an array of WP_User from "manager" user role
$users = get_users(['role' => 'manager']);
if ( count($users) > 0 ) {
foreach ( $users as $user ) {
if ( $customer_group === get_user_meta( $user->ID, 'group_meta_key', true ) ) {
$manager_emails[] = $user->data->user_email;
}
}
if( count($manager_emails) > 0 ) {
$recipient = implode(',', $manager_emails);
}
}
return $recipient;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该可以工作(未经测试)。
所以,网站是这样设置的:
有 2 种类型的角色,1 种下订单(客户),1 种处理订单(经理)。
这些可以分为多个组,每个组都有自己的客户和经理(每个可能的多个)。
经理们需要收到他们组内新订单的通知,并且为了支付假期和病假,每个经理都会收到他们组内的每一个订单。
我已经到了经理收到新订单电子邮件的地步,但是,他们多次收到邮件。发送的重复邮件数量与添加到收件人列表中的电子邮件数量相同,我这辈子都搞不清楚原因。
代码:
// Send mail to Manager on new order
add_filter('woocommerce_email_recipient_new_order', 'my_new_order_email_recipient', 10, 2);
function my_new_order_email_recipient($recipient, $order) {
$find_manager_args = array(
'role' => 'manager',
);
$find_manager_query = new WP_User_Query($find_manager_args);
$users = $find_manager_query->get_results();
$new_recipient = '';
if (!empty($users)) {
foreach ($users as $user1) {
if (get_user_meta(get_current_user_id(), 'group_meta_key', TRUE) === get_user_meta($user1->id, 'group_meta_key', TRUE)) {
if (isset($new_recipient) && !empty($new_recipient)) {
$new_recipient = "$new_recipient,";
}
$user_info = get_userdata($user1->ID);
$new_recipient .= $user_info->user_email;
}
}
}
else {
$new_recipient = get_option('admin_email');
}
return $new_recipient;
}
我发现的一切都和我拥有的完全一样。逗号分隔的地址列表应该有效。 没有支付系统,所以没有外部触发器。通过在组中添加和删除经理进行测试,重复项的数量随之变化。
我将不胜感激,因为它困扰了我好几天了。
首先,您无法在电子邮件通知中获取当前用户 ID,因为它是一个后台进程。使用WC_Order
方法get_customer_id()
.
现在您收到重复的电子邮件,因为您的代码中存在一些错误,可以简化这些错误。
我想 "manager" 是一个 自定义用户角色 ,因为 WooCommerce 使用 "shop_manager"
所以试试下面的方法:
// Send mail to Manager on new order
add_filter('woocommerce_email_recipient_new_order', 'my_new_order_email_recipient', 10, 2);
function my_new_order_email_recipient( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) )
return $recipient;
$customer_id = $order->get_customer_id();
$customer_group = get_user_meta( $customer_id, 'group_meta_key', true );
$manager_emails = [];
// Get an array of WP_User from "manager" user role
$users = get_users(['role' => 'manager']);
if ( count($users) > 0 ) {
foreach ( $users as $user ) {
if ( $customer_group === get_user_meta( $user->ID, 'group_meta_key', true ) ) {
$manager_emails[] = $user->data->user_email;
}
}
if( count($manager_emails) > 0 ) {
$recipient = implode(',', $manager_emails);
}
}
return $recipient;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该可以工作(未经测试)。