Adăugarea unei a doua adrese de email la o comandă finalizată în WooCommerce
Înainte să pun această întrebare, știu că există o ezitare (legitimă) în a răspunde aici la întrebări despre produsele Woo, având în vedere că au propriul lor suport și utilizatorii ar trebui încurajați să-l folosească. Sunt un utilizator Woo cu abonament plătit dar nu am putut rezolva problema cu suportul lor tehnic, iar întrebarea mea este despre suprascrierea claselor în WP, așa că sper să primesc un răspuns corect.
Întrebarea mea: când un email de comandă finalizată este trimis către client, trebuie să primesc și eu acest email, exact în aceeași formă și în mod automat, exact așa cum este trimis clientului, și nu într-un alt format cum este cel creat de diverse plugin-uri PDF pentru facturi WooCommerce. Pot realiza foarte ușor acest lucru modificând următoarea linie din /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() );
pentru a deveni:
$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
$this->send( me@myemail.com, $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
Totuși, evident că o astfel de modificare nu va supraviețui unei actualizări. Am o temă copil care suprascrie șabloanele WooCommerce. Există vreun mecanism echivalent prin care pot suprascrie o clasă într-un mod similar încapsulat? Sau puteți recomanda o abordare alternativă (în afară de setarea serverului SMTP pentru a trimite bcc la toate emailurile către a doua adresă) pentru a realiza sarcina mea specifică de a primi acest email când și clientul îl primește?

Există de fapt un filtru pe care îl poți folosi, vezi abstract-wc-email.php
, linia 214:
return apply_filters( 'woocommerce_email_recipient_' . $this->id, $this->recipient, $this->object );
poți adăuga următoarele în functions.php:
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'functia_ta_filtru_recipient_email', 10, 2);
function functia_ta_filtru_recipient_email($recipient, $object) {
$recipient = $recipient . ', eu@emailulmeu.com';
return $recipient;
}
singurul dezavantaj este că destinatarul va vedea atât adresa ta cât și a sa în câmpul To:.
Alternativ, bazându-ne pe răspunsul lui Steve, poți folosi filtrul woocommerce_email_headers
. Obiectul $object transmis îți permite să aplici asta doar la emailul de comandă finalizată:
add_filter( 'woocommerce_email_headers', 'functia_mea_filtru_anteturi', 10, 2);
function functia_mea_filtru_anteturi( $headers, $object ) {
if ($object == 'customer_completed_order') {
$headers .= 'BCC: Numele meu <eu@emailulmeu.com>' . "\r\n";
}
return $headers;
}

Asta arată foarte promițător. Sugerezi să creezi un plugin pentru această funcționalitate?

Funcționează perfect, mulțumesc foarte mult. Chiar ați depășit așteptările.

Codul de mai jos "Alternativ, bazându-se pe răspunsul lui Steve..." nu pare să funcționeze cu WC 2.3... Aveți sugestii?

Niciunul dintre coduri nu funcționează pe WC 2.5.5, știți dacă au schimbat numele filtrului? Mulțumesc!

Încă funcționează pentru mine în WC 2.5.5. Dacă nu funcționează pentru tine, probabil este un conflict de plugin. Filtrul este încă același: https://github.com/woothemes/woocommerce/blob/2.5.5/includes/emails/class-wc-email.php#L281

Și există un alt filtru care vă va oferi acces la variabila $header, permițându-vă să adăugați un BCC (copie oarbă) la e-mailurile dvs., astfel încât să primiți o copie a fiecărui e-mail trimis clienților dumneavoastră pe WooCommerce. Acest lucru este la fel de simplu ca codul de mai sus, cu diferența că clienții dumneavoastră nu vor vedea adresa dvs. de e-mail.
La fel ca în soluția anterioară, ați adăuga următorul cod:
add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);
function mycustom_headers_filter_function($headers, $object) {
$headers = array();
$headers[] = 'Bcc: numele tău <eu@emailulmeu.com>';
$headers[] = 'Content-Type: text/html';
return $headers;
}
Acest filtru se aplică tuturor capetelor de e-mail ($headers) și setează automat tipul ca text/html. Rețineți că nu includeți '/r/n' în declarația tipului de conținut - acest lucru ar putea provoca o eroare în wp_mail() - funcția pe care WooCommerce o folosește pentru a trimite mesajele.
Eu folosesc acest cod pentru a verifica funcționalitatea în WooCommerce v2.0.14. Ar trebui să funcționeze și în versiuni anterioare, dar nu sunt sigur de cât timp acest filtru a fost inclus.

De ce să nu folosești /r/n? Cred că acea eroare apare doar atunci când adaugi /r/n în array-ul de headers. Exemplul tău de fapt suprascrie setarea de conținut, pe care o poți refolosi.

Am răspuns pe SO cu o metodă de a adăuga BCC doar la anumite email-uri și de a menține headerele existente.
