2017-04-08 2 views

Répondre

1

Je pense que lorsque vous essayez de brancher notification par courrier électronique à partir du modèle, où vous pouvez trouver de l'ordre, à ce temps des emails déjà envoyés.

Vous pouvez essayer une chose - en utilisant le crochet du destinataire, vous pouvez supprimer le courrier électronique du destinataire et renvoyer la chaîne vide. Ou si une chaîne vide déclenche une erreur, vous pouvez donner un email fictif.

Utilisez ce code pour cela:

// 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 = "[email protected]"; 
    } 
    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 = "[email protected]"; 
    } 
    return $recipient; 
} 
add_filter('woocommerce_email_recipient_new_order', 'wc_change_admin_new_order_email_recipient', 1, 2); 
+0

Merci pour votre aide! oui ça peut être une solution pour supprimer le mail du destinataire, intéressant ... maintenant la partie la plus difficile est d'écrire la condition (si l'identifiant du produit est ...). – jjj

+1

Si vous voyez les arguments de la fonction, vous obtenez l'objet order comme deuxième argument. Vous pouvez obtenir tous les éléments dans cet ordre et vérifier si le produit spécifique est dans la commande. Faites-moi savoir si vous avez encore besoin d'aide. –

+0

Merci Vidish, oui l'assistance serait appréciée, si nous supposons que l'ID de produit est 102, à quoi ressemblera le code? – jjj

1

Merci à @ vidish-purohit pour l'aide!

Voici mon code à utiliser si vous devez désactiver admin notification par courrier électronique pour un produit spécifique:

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); 

Et si vous devez désactiver client notification par courrier électronique pour un produit spécifique:

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);