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?

Halle
źródło
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 . ', [email protected]';
    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 <[email protected]>' . "\r\n";
    }

    return $headers;
}
Ewout
źródło
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 <[email protected]>';
    $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.

Steve Eldridge
źródło
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