Agregar una segunda dirección de correo electrónico a un pedido completado en WooCommerce [cerrado]

11

Antes de hacer esta pregunta, sé que existe una duda (legítima) para responder preguntas aquí sobre los productos Woo, ya que tienen su propio soporte y se debe alentar a sus usuarios a usarlo. Soy un usuario de Woo que paga pero no pude resolver esto con su soporte pagado, y mi pregunta es sobre anular las clases en WP, así que espero que tenga una audiencia justa.

Mi pregunta: cuando se envía un correo electrónico de pedido completado a un cliente, también necesito recibir este correo electrónico, literalmente y automáticamente, exactamente como se envía al cliente en lugar de en otro formato tal como se crea en los diversos PDF de factura complementos para WooCommerce. Puedo lograr esto fácilmente cambiando la siguiente línea en /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() );

leer:

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

Sin embargo, obviamente, un truco como este no sobrevivirá a una actualización. Tengo un tema secundario que anula las plantillas de WooCommerce. ¿Existe algún mecanismo equivalente por el cual pueda anular una clase de una manera similar encapsulada? ¿O puede recomendar un enfoque alternativo (además de configurar el servidor SMTP para enviar todos los correos electrónicos salientes a la segunda dirección) para lograr mi tarea específica de recibir este correo electrónico cuando el cliente también lo recibe?

Halle
fuente
He usado gmail / google como servidores smtp antes, y en realidad pone todos los correos electrónicos en la carpeta enviada ... (por lo que vale en su caso)
Ewout

Respuestas:

22

En realidad, hay un filtro que puede usar, vea abstract-wc-email.php, línea 214:

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

puedes poner lo siguiente en tus 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;
}

El único inconveniente es que el destinatario verá su dirección y la suya propia en el campo Para:.


Alternativamente, basándose en la respuesta de Steve, puede usar el woocommerce_email_headersfiltro. el $ objeto pasado le permite aplicar esto solo al correo electrónico del pedido completado:

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
fuente
Esto se ve muy prometedor. ¿Su sugerencia es crear un complemento para esta funcionalidad?
Halle
actualiza la respuesta!
Ewout
Eso funciona perfectamente , muchas gracias. Esto realmente fue más allá.
Halle
El siguiente código "Alternativamente, basándose en la respuesta de Steve ..." no parece funcionar con WC 2.3 ... ¿Alguna sugerencia?
drake035
Ninguno de los códigos funciona en WC 2.5.5, ¿sabe si cambiaron el nombre del filtro? ¡Gracias!
Jaypee
9

Y hay otro filtro que le dará acceso a la variable $ header que puede permitirle BCC a sus correos electrónicos para que obtenga una copia de cada correo electrónico que va a sus clientes en Woocommerce. Esto es tan fácil como el código anterior, excepto que sus clientes no verán su dirección de correo electrónico.

Al igual que la solución anterior, agregaría el siguiente 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;
}

Este filtro se aplica a todos los encabezados $ y también codifica el tipo como text / html. Tenga en cuenta que no incluye el '/ r / n' en la declaración del tipo de contenido, esto podría causar un error en wp_mail (), que es lo que Woocommerce usa para enviar sus mensajes.

Estoy usando este código para poder verificar que Woocommerce v2.0.14. También debería funcionar en versiones anteriores, pero no estoy seguro de cuánto tiempo se ha incluido el filtro.

Steve Eldridge
fuente
¿Por qué no usar / r / n? Creo que ese error solo aparece cuando agrega / r / n en la matriz de encabezados. Su ejemplo realmente sobrescribe la configuración de contenido, que puede reutilizar.
Ewout
2
He contestado en SO con un único método para añadir BCC a los correos electrónicos específicos y para mantener las cabeceras existentes.
helgatheviking