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?
Odpowiedzi:
W rzeczywistości istnieje filtr, którego można użyć, patrz
abstract-wc-email.php
wiersz 214:możesz wstawić następujące do swojego functions.php:
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_headers
filtra. przekazany obiekt $ pozwala zastosować to tylko do wypełnionego e-maila z zamówieniem:źródło
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:
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.
źródło