Adăugarea unei a doua adrese de email la o comandă finalizată în WooCommerce

23 mar. 2013, 11:44:36
Vizualizări: 52.7K
Voturi: 15

Î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?

1
Comentarii

Am folosit gmail/google ca servere smtp înainte și de fapt pune toate email-urile în folderul "Trimise"... (pentru ceea ce valorează în cazul tău)

Ewout Ewout
23 mar. 2013 13:20:20
Toate răspunsurile la întrebare 2
6
27

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;
}
23 mar. 2013 13:28:29
Comentarii

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

Halle Halle
23 mar. 2013 14:02:41

actualizează răspunsul!

Ewout Ewout
23 mar. 2013 15:45:14

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

Halle Halle
23 mar. 2013 16:02:36

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?

drake035 drake035
22 iul. 2015 15:07:39

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

Jaypee Jaypee
14 iun. 2016 01:17:55

Î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

Ewout Ewout
17 iun. 2016 12:02:09
Arată celelalte 1 comentarii
2
10

Ș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.

28 sept. 2013 22:29:54
Comentarii

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.

Ewout Ewout
6 mar. 2014 15:37:03

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.

helgatheviking helgatheviking
7 oct. 2014 14:32:30