Adicionando um segundo endereço de e-mail a um pedido concluído no WooCommerce [closed]

10

Antes de fazer esta pergunta, sei que há uma (legítima) hesitação em responder a perguntas sobre produtos Woo, pois eles têm seu próprio suporte e seus usuários devem ser encorajados a usá-lo. Eu sou um usuário pagante do Woo, mas não consegui resolver isso com o suporte pago deles, e minha pergunta é sobre substituir as classes no WP, então espero que tenha uma audiência justa.

Minha pergunta: quando um e-mail de pedido concluído é enviado para um cliente, também preciso receber esse e-mail, textualmente e automaticamente, exatamente como é enviado ao cliente, em vez de em outro formato criado pelo vários plugins PDF fatura para WooCommerce. Eu posso facilmente conseguir isso alterando a seguinte linha em /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() );

para 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 um upgrade. Eu tenho um tema filho que substitui 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 definir o servidor SMTP para bcc todos os e-mails enviados para o segundo endereço) para realizar minha tarefa específica de receber este e-mail quando o cliente também o recebe?

    
por Halle 23.03.2013 / 10:44

2 respostas

18

Na verdade, existe um filtro que você pode usar, consulte abstract-wc-email.php , linha 214:

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

você pode colocar o seguinte em suas funções.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;
}

o único inconveniente é que o destinatário verá seu endereço & por conta própria no campo Para:

Como alternativa, com base na resposta de Steve, você pode usar o filtro woocommerce_email_headers . o objeto $ passado permite que você apenas aplique isso ao e-mail 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 <my@email.com>' . "\r\n";
    }

    return $headers;
}
    
por Ewout 23.03.2013 / 12:28
8

E há outro filtro que lhe dará acesso à variável $ header, que pode permitir que você envie seus e-mails para que você receba uma cópia 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 <me@myemail.com>';
    $headers[] = 'Content-Type: text/html';
    return $headers;
}

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

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

    
por Steve Eldridge 28.09.2013 / 21:29