web-dev-qa-db-fra.com

Add it one adresse email in a order terminée in WooCommerce

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 assistance payante. Ma question étant de remplacer les classes dans WP, j'espère que cela bénéficiera d'une audience équitable.

Ma question: quand 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 celui créé par les différentes factures PDF plugins 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, il est évident qu'un hack comme celui-ci ne survivra 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 remplacer une classe de manière similaire? 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 consistant à recevoir cet e-mail lorsque le client le reçoit également?

10
Halle

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 ce qui suit dans votre 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 à la fois votre adresse et la sienne dans le champ À:.


Sinon, en vous appuyant sur la réponse de Steve, vous pouvez utiliser le filtre woocommerce_email_headers. L'objet $ passé ne vous permet de l'appliquer qu'à l'email de commande complété:

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;
}
19
Ewout

Et il existe un autre filtre qui vous donnera accès à la variable $ header qui peut vous permettre de transmettre vos courriers électroniques à la BCC 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 fixes du type text/html. Notez que vous n'incluez pas le '/ r/n' dans la déclaration du type de contenu, ce qui pourrait entraîner 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. Devrait également fonctionner dans les versions précédentes, mais vous ne savez pas combien de temps le filtre a été inclus.

8
Steve Eldridge