向相关管理人员发送WooCommerce新订单邮件通知。

问题描述 投票: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;
}

我找到的所有东西都和我的一模一样。逗号分隔的地址列表应该工作.没有支付系统,所以没有外部触发器。通过从一个组中添加和删除经理来测试,重复的数量也随之改变。

希望得到帮助,因为这让我困惑了好几天。

php wordpress woocommerce user-roles email-notifications
1个回答
1
投票

首先你无法在邮件通知上获取当前用户ID,因为这是一个后台流程。你可以得到的是属于订单的客户ID,使用的是 WC_Order 办法 get_customer_id().

现在你收到重复的邮件,是因为你的代码中存在一些错误,可以简化。

我想 "经理" 是一个 自定义用户角色 由于WooCommerce使用 "店长"

所以可以试试下面的方法。

// 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;
}

代码放在你的活动子主题(或活动主题)的function.php文件中。它应该工作(未经测试)。

© www.soinside.com 2019 - 2024. All rights reserved.