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

10

Antes de hacer esta pregunta, sé que hay una duda (legítima) de responder aquí a las preguntas sobre los productos de Woo, ya que tienen su propio soporte y sus usuarios deberían ser alentados a usarlo. Soy un usuario de Woo que paga, pero no pude resolverlo con su apoyo pagado, y mi pregunta es acerca de anular las clases en WP, así que espero que sea 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 algún otro formato como el creado por Varios plugins PDF de factura para WooCommerce. Puedo hacerlo 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 hack como este no va a sobrevivir a una actualización. Tengo un tema hijo que anula las plantillas de WooCommerce. ¿Existe algún mecanismo equivalente mediante el cual pueda anular una clase de forma similar encapsulada? ¿O puede recomendar un enfoque alternativo (además de configurar el servidor SMTP para que transfiera todos los correos electrónicos salientes a la segunda dirección) para cumplir mi tarea específica de recibir este correo electrónico cuando el cliente también lo recibe?

    
pregunta Halle 23.03.2013 - 10:44

2 respuestas

18

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

el único inconveniente es que el destinatario verá tanto su dirección como amp; el suyo propio en el campo Para:

Alternativamente, basándose en la respuesta de Steve, puedes usar el filtro woocommerce_email_headers . El $ objeto aprobado 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 <my@email.com>' . "\r\n";
    }

    return $headers;
}
    
respondido por el Ewout 23.03.2013 - 12:28
8

Y hay otro filtro que le dará acceso a la variable $ header que puede permitirle enviar BCC a sus correos electrónicos para obtener una copia de cada correo electrónico que se envía 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 en 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 <me@myemail.com>';
    $headers[] = 'Content-Type: text/html';
    return $headers;
}

Este filtro se aplica a todos los encabezados de $ y también codifica el tipo como texto / html. Tenga en cuenta que no incluye '/ r / n' en la declaración de tipo de contenido, esto podría causar un error en wp_mail (), que es lo que Woocommerce utiliza 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 está seguro de cuánto tiempo se ha incluido el filtro.

    
respondido por el Steve Eldridge 28.09.2013 - 21:29

Lea otras preguntas en las etiquetas