Dodanie drugiego adresu e-mail do ukończonego zamówienia w WooCommerce [zamknięte]


11

Zanim zadam to pytanie, wiem, że istnieje (uzasadnione) wahanie, aby odpowiedzieć tutaj na pytania dotyczące produktów Woo, ponieważ mają one własne wsparcie i ich użytkowników należy zachęcać do korzystania z niego. Jestem płatnym użytkownikiem Woo, ale nie mogłem rozwiązać tego za pomocą płatnego wsparcia, a moje pytanie dotyczy zastąpienia zajęć w WP, więc mam nadzieję, że otrzyma uczciwe wysłuchanie.

Moje pytanie: kiedy e-mail z wypełnionym zamówieniem jest wysyłany do klienta, muszę również otrzymywać ten e-mail, dosłownie i automatycznie, dokładnie tak, jak jest on wysyłany do klienta, a nie w innym formacie, takim jak ten, który jest utworzony przez różne faktury PDF wtyczki do WooCommerce. Mogę bardzo łatwo to zrobić, zmieniając następujący wiersz /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() );

czytać:

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

Jednak oczywiście taki hack nie przetrwa aktualizacji. Mam motyw potomny, który zastępuje szablony WooCommerce. Czy istnieje jakiś równoważny mechanizm, za pomocą którego można zastąpić klasę w podobny sposób zamknięty? A może możesz polecić alternatywne podejście (oprócz ustawienia serwera SMTP na zapisywanie wszystkich wychodzących wiadomości e-mail na drugi adres) w celu wykonania mojego konkretnego zadania polegającego na otrzymaniu tego e-maila, gdy klient również go otrzyma?


Wcześniej używałem gmail / google jako serwerów smtp, i faktycznie umieszcza wszystkie e-maile w wysłanym folderze ... (dla tego, co warto w twoim przypadku)
Ewout

Odpowiedzi:


22

W rzeczywistości istnieje filtr, którego można użyć, patrz abstract-wc-email.phpwiersz 214:

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

możesz wstawić następujące do swojego 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 . ', me@myemail.com';
    return $recipient;
}

jedyną wadą jest to, że odbiorca zobaczy zarówno Twój adres, jak i swój własny w polu Do :.


Alternatywnie, korzystając z odpowiedzi Steve'a, możesz użyć woocommerce_email_headersfiltra. przekazany obiekt $ pozwala zastosować to tylko do wypełnionego e-maila z zamówieniem:

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 <my@email.com>' . "\r\n";
    }

    return $headers;
}

To wygląda bardzo obiecująco. Czy sugerujesz utworzenie wtyczki dla tej funkcji?
Halle

zaktualizuj odpowiedź!
Ewout

To działa idealnie , dziękuję bardzo. To naprawdę przekroczyło granice.
Halle

Poniższy kod „Alternatywnie, opierając się na odpowiedzi Steve'a ...” nie działa z WC 2.3 ... Jakaś sugestia?
drake035

Żaden z kodów nie działa na WC 2.5.5, czy wiesz, czy zmienili nazwę filtra? Dzięki!
Jaypee,

9

Jest też inny filtr, który da ci dostęp do zmiennej $ header, która może umożliwić BCC twoje e-maile, dzięki czemu otrzymasz kopię każdego e-maila, który trafia do twoich klientów na Woocommerce. Jest to tak proste, jak powyższy kod, z tym wyjątkiem, że Twoi klienci nie zobaczą Twojego adresu e-mail.

Podobnie jak powyższe rozwiązanie, należy dodać następujący kod:

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

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

Filtr ten stosuje się do wszystkich nagłówków $, a także kodów stałych typu text / html. Zauważ, że nie umieszczasz '/ r / n' w deklaracji typu zawartości - może to spowodować błąd w wp_mail () - co Woocommerce używa do wysyłania wiadomości.

Używam tego kodu, aby sprawdzić, czy Woocommerce v2.0.14. Powinien również działać we wcześniejszych wersjach, ale nie jestem pewien, jak długo uwzględniono filtr.


Dlaczego nie użyć / r / n? Myślę, że ten błąd pojawia się dopiero po dodaniu / r / n do tablicy nagłówków. Twój przykład faktycznie zastępuje ustawienie zawartości, którego możesz ponownie użyć.
Ewout,

2
I już odpowiedział na SO o metodę tylko dodać BCC do poszczególnych e-maili i utrzymania istniejących nagłówków.
helgatheviking
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.