Adicionando um segundo endereço de email a um pedido concluído no WooCommerce [fechado]

11

Antes de fazer essa pergunta, sei que existe uma hesitação (legítima) em responder aqui sobre os produtos Woo, pois eles têm seu próprio suporte e seus usuários devem ser incentivados a usá-lo. Eu sou um usuário pagante do Woo, mas não consegui resolver isso com o suporte pago, e minha pergunta é sobre a substituição de classes no WP, por isso espero que seja uma audiência justa.

Minha pergunta: quando um email de pedido preenchido é enviado a um cliente, também preciso receber esse email, literal e automaticamente, exatamente como é enviado ao cliente e não em outro formato, como é criado pelos vários PDF da fatura plugins para o WooCommerce. Posso fazer isso facilmente alterando a seguinte linha /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() );

ler:

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

No entanto, obviamente, um hack como esse não sobreviverá a uma atualização. Eu tenho um tema filho que substitui os modelos WooCommerce. Existe algum mecanismo equivalente pelo qual eu possa substituir uma classe de maneira similarmente encapsulada? Ou você pode recomendar uma abordagem alternativa (além de configurar o servidor SMTP para enviar todos os emails enviados para o segundo endereço) para realizar minha tarefa específica de receber esse email quando o cliente também o receber?

Halle
fonte
Eu tenho usado o Gmail / Google como servidores SMTP antes, e realmente coloca alle os e-mails na pasta Enviadas ... (Por que vale a pena no seu caso)
Ewout

Respostas:

22

Na verdade, existe um filtro que você pode usar, veja a abstract-wc-email.phplinha 214:

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

você pode colocar o seguinte em seu 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;
}

a única desvantagem é que o destinatário verá seu endereço e o seu no campo Para:.


Como alternativa, com base na resposta de Steve, você pode usar o woocommerce_email_headersfiltro. o objeto $ passado permite que você aplique isso apenas ao email de pedido concluído:

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
fonte
Isso parece muito promissor. Sua sugestão é criar um plug-in para essa funcionalidade?
Halle
atualize a resposta!
Ewout
Isso funciona perfeitamente , muito obrigado. Isso realmente foi acima e além.
Halle
O código abaixo "Alternativamente, baseando-se na resposta de Steve ..." não parece funcionar com o WC 2.3 ... Alguma sugestão?
drake035
Nenhum dos códigos está funcionando no WC 2.5.5, você sabe se eles mudaram o nome do filtro? Obrigado!
Jaypee
9

E há outro filtro que lhe dará acesso à variável $ header que pode permitir que você envie Cco para seus e-mails, para que você obtenha uma cópia carbono de cada e-mail enviado aos seus clientes no Woocommerce. Isso é tão fácil quanto o código acima, exceto que seus clientes não verão seu endereço de e-mail.

Assim como a solução acima, você adicionaria o seguinte código:

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

Esse filtro se aplica a todos os cabeçalhos $ e também codifica o tipo como texto / html. Observe que você não inclui '/ r / n' na declaração do tipo de conteúdo - isso pode causar um erro em wp_mail () - que é o que o Woocommerce usa para enviar suas mensagens.

Estou usando esse código para verificar o Woocommerce v2.0.14. Também deve funcionar em versões anteriores, mas não sei por quanto tempo o filtro foi incluído.

Steve Eldridge
fonte
Por que não usar o / r / n? Eu acho que esse erro só aparece quando você adiciona o / r / n na matriz de cabeçalhos. Seu exemplo realmente substitui a configuração de conteúdo, que você pode reutilizar.
Ewout
2
Eu respondi no SO com um método para adicionar apenas BCC a e-mails específicos e para manter os cabeçalhos existentes.
helgatheviking