3 जवाब

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

मुझे लगता है कि जब आप टेम्पलेट से ईमेल अधिसूचना को हुक करने का प्रयास करते हैं, जहां आप ऑर्डर ढूंढ सकते हैं, उस समय ईमेल पहले ही भेजे जा चुके हैं।

आप एक चीज़ आज़मा सकते हैं - प्राप्तकर्ता के हुक का उपयोग करके आप प्राप्तकर्ता ईमेल को हटा सकते हैं और खाली स्ट्रिंग वापस कर सकते हैं। या अगर खाली स्ट्रिंग एरर को ट्रिगर करती है, तो आप कुछ डमी ईमेल दे सकते हैं।

इसके लिए इस कोड का प्रयोग करें:

// Change new order email recipient for registered customers
function wc_change_admin_new_order_email_recipient( $recipient, $order ) {
    global $woocommerce;

    // check if product in order
    if ( true ) ) {
        $recipient = "";
    } else {
        $recipient = "newbusiness@yourdomain.com";
    }
    return $recipient;
}
add_filter('woocommerce_email_recipient_new_order', 'wc_change_admin_new_order_email_recipient', 1, 2);

// Change new order email recipient for registered customers
function wc_change_admin_new_order_email_recipient( $recipient, $order ) {

    $flagHasProduct = false;

    // Get items in order
    $items = $order->get_items(); 

    // Loop for all items
    foreach ( $items as $item ) {
       $product_id = $item['product_id'];

        // check if specific product is in order
        if ( $product_id == 102 ) {
            $flagHasProduct = true;
        }
    }

    // if product is found then remove recipient
    if ($flagHasProduct) {
        $recipient = "";
    } else {
        $recipient = "newbusiness@yourdomain.com";
    }
    return $recipient;
}
add_filter('woocommerce_email_recipient_new_order', 'wc_change_admin_new_order_email_recipient', 1, 2);
4
Vidish Purohit 8 अप्रैल 2017, 20:45

मदद के लिए @vidish-purohit को धन्यवाद!

यदि आपको किसी विशिष्ट उत्पाद के लिए व्यवस्थापक ईमेल सूचना को अक्षम करने की आवश्यकता है, तो उपयोग करने के लिए मेरा कोड यहां दिया गया है:

function change_email_recipient_depending_of_product_id( $recipient, $order ) {
    global $woocommerce;
    $items = $order->get_items();
    foreach ( $items as $item ) {
        $product_id = $item['product_id'];
        if ( $product_id == xxx ) {
            $recipient = '';
        }
        return $recipient;
    }
}
add_filter( 'woocommerce_email_recipient_new_order', 'change_email_recipient_depending_of_product_id', 10, 2 );

और यदि आपको किसी विशिष्ट उत्पाद के लिए ग्राहक ईमेल सूचना को अक्षम करने की आवश्यकता है:

function change_email_recipient_depending_of_product_id( $recipient, $order ) {
    global $woocommerce;
    $items = $order->get_items();
    foreach ( $items as $item ) {
        $product_id = $item['product_id'];
        if ( $product_id == xxx ) {
            $recipient = '';
        }
        return $recipient;
    }
}
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'change_email_recipient_depending_of_product_id', 10, 2 );
4
jjj 10 अप्रैल 2017, 13:41

उपरोक्त कोड Woocommerce ईमेल सेटिंग विकल्प पृष्ठ में ईमेल विकल्प को अक्षम कर देगा।

/**
 * Disable Admin email Notification for Specific Product
 */

function cstm_change_email_recipient_for_giftcard_product($recipient, $order)
{
    // Bail on WC settings pages since the order object isn't yet set yet
    // Not sure why this is even a thing, but shikata ga nai
    $page = $_GET['page'] = isset($_GET['page']) ? $_GET['page'] : '';
    if ('wc-settings' === $page) {
        return $recipient;
    }

    // just in case
    if (!$order instanceof WC_Order) {
        return $recipient;
    }

    $items = $order->get_items();
    foreach ($items as $item) {
        $product_id = $item['product_id'];
        if ($product_id == xxxx) {
            $recipient = '';
        }
        return $recipient;
    }
}

add_filter('woocommerce_email_recipient_new_order', 'cstm_change_email_recipient_for_giftcard_product', 10, 2);

यह कोड Woocommerce के नवीनतम संस्करण में ठीक काम करता है।

1
Rigal 4 अगस्त 2020, 14:35