Ajout d'une deuxième adresse électronique à une commande terminée dans WooCommerce [fermé]

10

Avant de poser cette question, je sais qu’il ya une hésitation (légitime) à répondre aux questions concernant les produits Woo, car ils ont leur propre soutien et leurs utilisateurs devraient être encouragés à l’utiliser. Je suis un utilisateur payant de Woo, mais je ne pouvais pas résoudre ce problème avec leur aide payante. Ma question concerne le remplacement des classes dans WP. J'espère que cela bénéficiera d'une audience équitable.

Ma question est la suivante: lorsqu'un email de commande terminé est envoyé à un client, je dois également recevoir cet email, textuellement et automatiquement, exactement comme il est envoyé au client plutôt que dans un autre format tel que créé par le destinataire. divers plugins PDF de facturation pour WooCommerce. Je peux très facilement y parvenir en modifiant la ligne suivante dans /woocommerce/classes/emails/class-wc-email-customer-completed-order.php :

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

à lire:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
$this->send( [email protected], $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

Cependant, un piratage comme celui-ci ne survivra évidemment pas à une mise à niveau. J'ai un thème enfant qui remplace les modèles WooCommerce. Existe-t-il un mécanisme équivalent permettant de redéfinir une classe de la même manière? Ou pouvez-vous recommander une autre approche (en plus de configurer le serveur SMTP pour que tous les e-mails sortants soient envoyés à la deuxième adresse) pour accomplir ma tâche spécifique de recevoir cet e-mail lorsque le client le reçoit également?

    
posée Halle 23.03.2013 - 10:44

2 réponses

18

Il existe en fait un filtre que vous pouvez utiliser, voir abstract-wc-email.php , ligne 214:

return apply_filters( 'woocommerce_email_recipient_' . $this->id, $this->recipient, $this->object );

vous pouvez mettre les éléments suivants dans votre fichier functions.php:

add_filter( 'woocommerce_email_recipient_customer_completed_order', 'your_email_recipient_filter_function', 10, 2);

function your_email_recipient_filter_function($recipient, $object) {
    $recipient = $recipient . ', [email protected]';
    return $recipient;
}

Le seul inconvénient est que le destinataire verra votre adresse & le sien dans le champ À:

Sinon, en vous basant sur la réponse de Steve, vous pouvez utiliser le filtre woocommerce_email_headers . L'objet $ passé vous permet de l'appliquer uniquement à l'email de commande terminé:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
    if ($object == 'customer_completed_order') {
        $headers .= 'BCC: My name <[email protected]>' . "\r\n";
    }

    return $headers;
}
    
réponse donnée Ewout 23.03.2013 - 12:28
8

Et il existe un autre filtre qui vous donnera accès à la variable $ header qui peut vous permettre de copier vos courriers électroniques afin que vous obteniez une copie conforme de chaque courrier envoyé à vos clients sur Woocommerce. C’est aussi simple que le code ci-dessus, sauf que vos clients ne verront pas votre adresse électronique.

Tout comme la solution ci-dessus, vous ajouteriez le code suivant:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function($headers, $object) {
    $headers = array();
    $headers[] = 'Bcc: your name <[email protected]>';
    $headers[] = 'Content-Type: text/html';
    return $headers;
}

Ce filtre s'applique à tous les en-têtes $ et aux codes en dur du type text / html. Notez que vous n’incluez pas le '/ r / n' dans la déclaration du type de contenu, ce qui pourrait provoquer une erreur dans wp_mail (). C’est ce que Woocommerce utilise pour envoyer vos messages.

J'utilise ce code pour pouvoir vérifier que Woocommerce v2.0.14. Cela devrait également fonctionner dans les versions précédentes, mais vous ne savez pas combien de temps le filtre a été inclus.

    
réponse donnée Steve Eldridge 28.09.2013 - 21:29

Lire d'autres questions sur les étiquettes