तो, वेबसाइट कुछ इस तरह सेट की गई है:
भूमिकाएं 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;
}

मैं जो कुछ भी पाता हूं वह ठीक वैसा ही है जैसा मेरे पास है। पतों की अल्पविराम से अलग की गई सूची को काम करना चाहिए। कोई भुगतान प्रणाली नहीं है, इसलिए कोई बाहरी ट्रिगर नहीं है। किसी समूह से प्रबंधकों को जोड़कर और हटाकर परीक्षण किया जाता है और उसके साथ डुप्लिकेट की मात्रा में परिवर्तन होता है।

मदद की सराहना की जाएगी क्योंकि यह मुझे कई दिनों से स्तब्ध कर रहा है।

1
Nahbyr 3 जून 2020, 15:59

1 उत्तर

सबसे बढ़िया उत्तर

पहले आप ईमेल सूचनाओं पर वर्तमान उपयोगकर्ता आईडी प्राप्त नहीं कर सकते, क्योंकि यह एक पृष्ठभूमि प्रक्रिया है। आप जो प्राप्त कर सकते हैं वह ग्राहक आईडी है जो WC_Order पद्धति get_customer_id() का उपयोग करके ऑर्डर से संबंधित है।

अब आपको डुप्लीकेट ईमेल मिलते हैं क्योंकि आपके कोड में कुछ गलतियाँ हैं, जिन्हें सरल बनाया जा सकता है।

मुझे लगता है कि "प्रबंधक" एक कस्टम उपयोगकर्ता भूमिका है क्योंकि 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 फ़ाइल में जाता है। यह काम करना चाहिए (अवांछित)।

1
LoicTheAztec 3 जून 2020, 17:02