Добавление второго адреса электронной почты к завершенному заказу в 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-сервере значения bcc для всех исходящих писем на второй адрес) для выполнения моей конкретной задачи получения этого письма, когда клиент также получает его?

Галле
источник
Раньше я использовал gmail / google в качестве серверов smtp, и он фактически помещает все электронные письма в отправленную папку ... (для чего это стоит в вашем случае)
Ewout

Ответы:

22

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

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

Вы можете поместить следующее в ваши 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;
}

Единственным недостатком является то, что получатель будет видеть ваш адрес и его собственный в поле To :.


Кроме того, основываясь на ответе Стива, вы можете использовать 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
источник
Это выглядит очень многообещающе. Вы предлагаете создать плагин для этой функциональности?
Галле
обновить ответ!
Ewout
Это прекрасно работает , большое спасибо. Это действительно вышло за пределы.
Галле
Код ниже «В качестве альтернативы, опираясь на ответ Стива ...», похоже, не работает с WC 2.3 ... Есть предложения?
drake035
Ни один из кодов не работает на WC 2.5.5, знаете ли вы, если они изменили название фильтра? Спасибо!
Jaypee
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