Додавання другої адреси електронної пошти до завершеного замовлення в WooCommerce [закрито]


11

Перш ніж я задаю це запитання, я знаю, що є відповідні запитання щодо продуктів Woo (законні), оскільки вони мають власну підтримку, і їх користувачів слід заохочувати використовувати. Я платний користувач Woo, але не міг вирішити це за допомогою своєї платної підтримки, і моє запитання стосується перевищення класів у WP, тому я сподіваюся, що він отримає справедливий слух.

Моє запитання: коли заповнений електронний лист замовлення надсилається замовнику, мені також потрібно отримувати це повідомлення електронним шляхом, дослівно і автоматично, точно так, як воно надсилається замовнику, а не в іншому форматі, наприклад, створеному різними PDF-рахунками-фактурами. плагіни для WooCommerce. Я дуже легко це досягну, змінивши наступний рядок у /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() );

читати:

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

Однак, очевидно, такий хак не переживе оновлення. У мене є дочірня тема, яка переосмислює шаблони WooCommerce. Чи існує якийсь еквівалентний механізм, за допомогою якого я можу замінити клас аналогічно капсульованим способом? Або ви можете порекомендувати альтернативний підхід (крім того, щоб встановити SMTP-сервер, щоб приєднати всі вихідні електронні листи на другу адресу) для виконання мого конкретного завдання щодо отримання цього електронного листа, коли клієнт також отримає його?


Раніше я використовував gmail / google в якості SMTP-серверів, і він фактично ставить але електронні листи в надіслану папку ... (для чого це варто у вашому випадку)
Ewout

Відповіді:


22

Насправді є фільтр, який ви можете використовувати, див. abstract-wc-email.php, Рядок 214:

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

ви можете помістити у свою функцію.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;
}

єдиний недолік полягає в тому, що одержувач побачить і вашу адресу, і його власну в полі Кому:.


Як варіант, спираючись на відповідь Стіва, ви можете використовувати woocommerce_email_headersфільтр. переданий об'єкт $ дозволяє застосувати це лише до електронної пошти, що завершилася:

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;
}

Це виглядає дуже перспективно. Ваша пропозиція створити плагін для цієї функції?
Галле

оновіть відповідь!
Ewout

Це прекрасно працює, дуже дякую. Це справді йшло вище і далі.
Галле

Код внизу "Альтернативно, спираючись на відповідь Стіва ...", схоже, не працює з WC 2.3 ... Будь-яка пропозиція?
drake035

Жоден з кодів не працює на WC 2.5.5, чи знаєте ви, чи змінили ім’я фільтра? Дякую!
Джейпі

9

І є ще один фільтр, який надасть вам доступ до змінної $ header, яка може дозволити вам BCC ваші електронні листи, щоб ви отримали копію кожного електронного листа, що надходить до ваших клієнтів у Woocommerce. Це так само просто, як і наведений вище код, за винятком того, що ваші клієнти не побачать вашу електронну адресу.

Так само, як рішення вище, ви додасте наступний код:

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;
}

Цей фільтр застосовується до всіх заголовків $, а також жорстких кодів типу text / html. Зауважте, що ви не включаєте '/ r / n' в декларацію про тип вмісту - це може спричинити помилку в wp_mail () - саме для Woocommerce використовується для надсилання ваших повідомлень.

Я використовую цей код, щоб переконатися, що Woocommerce v2.0.14. Також повинен працювати в більш ранніх версіях, але не впевнений, як довго фільтр включений.


Чому б не використовувати / r / n? Я думаю, що ця помилка виникає лише тоді, коли ви додаєте / r / n у масив заголовків. Ваш приклад фактично переписує налаштування вмісту, який ви можете повторно використовувати.
Ewout

2
Я відповів на SO так, щоб додати BCC лише до певних електронних листів та підтримувати існуючі заголовки.
helgatheviking
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.