Aggiunta di un secondo indirizzo e-mail a un ordine completato in WooCommerce [chiuso]


11

Prima di porre questa domanda, so che c'è una (legittima) esitazione a rispondere alle domande qui sui prodotti Woo poiché hanno il loro supporto e i loro utenti dovrebbero essere incoraggiati a usarlo. Sono un utente Woo pagante ma non sono riuscito a risolverlo con il loro supporto a pagamento, e la mia domanda riguarda l'override delle classi in WP, quindi spero che abbia un ascolto equo.

La mia domanda: quando un'e-mail di ordine completata viene inviata a un cliente, devo anche ricevere questa e-mail, alla lettera e automaticamente, esattamente come viene inviata al cliente piuttosto che in qualche altro formato come quello creato dai vari PDF delle fatture plugin per WooCommerce. Posso farlo facilmente cambiando la seguente riga in /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() );

leggere:

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

Tuttavia, ovviamente un hack come questo non sopravviverà a un aggiornamento. Ho un tema figlio che sostituisce i modelli WooCommerce. Esiste un meccanismo equivalente con cui posso scavalcare una classe in modo simile incapsulato? Oppure puoi consigliare un approccio alternativo (oltre a impostare il server SMTP su ccn tutte le e-mail in uscita al secondo indirizzo) per eseguire la mia specifica attività di ricezione di questa e-mail quando anche il cliente la riceve?


Ho usato gmail / google come server smtp prima, e in realtà mette tutte le e-mail nella cartella inviata ... (per quello che vale nel tuo caso)
Ewout

Risposte:


22

In realtà c'è un filtro che puoi usare, vedi abstract-wc-email.php, linea 214:

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

puoi inserire quanto segue nel tuo function.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;
}

l'unico inconveniente è che il destinatario vedrà il tuo indirizzo e il suo nel campo A :.


In alternativa, basandoti sulla risposta di Steve, puoi usare il woocommerce_email_headersfiltro. l'oggetto $ passato ti consente di applicarlo solo all'email dell'ordine completata:

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

Sembra molto promettente. Il tuo suggerimento è di creare un plugin per questa funzionalità?
Halle,

aggiorna la risposta!
Ewout

Funziona perfettamente , grazie mille. Questo è andato ben oltre.
Halle,

Il codice sotto "In alternativa, basandosi sulla risposta di Steve ..." non sembra funzionare con WC 2.3 ... Qualche suggerimento?
drake035,

Nessuno dei codici funziona su WC 2.5.5, sai se hanno cambiato il nome del filtro? Grazie!
Jaypee,

9

E c'è un altro filtro che ti darà accesso alla variabile $ header che può permetterti di BCC le tue e-mail in modo da ottenere una copia carbone di ogni e-mail che va ai tuoi clienti su Woocommerce. Questo è facile come il codice sopra, tranne per il fatto che i tuoi clienti non vedranno il tuo indirizzo email.

Proprio come la soluzione sopra, aggiungerei il seguente codice:

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

Questo filtro si applica a tutte le intestazioni $ e anche ai codici hard del tipo come text / html. Nota che non includi '/ r / n' nella dichiarazione del tipo di contenuto - questo potrebbe causare un errore in wp_mail () - che è ciò che Woocommerce usa per inviare i tuoi messaggi.

Sto usando questo codice in modo da poter verificare che Woocommerce v2.0.14. Dovrebbe funzionare anche nelle versioni precedenti ma non è sicuro da quanto tempo è stato incluso il filtro.


Perché non usare / r / n? Penso che l'errore si verifichi solo quando aggiungi / r / n nella matrice delle intestazioni. Il tuo esempio in realtà sovrascrive l'impostazione del contenuto, che puoi riutilizzare.
Ewout

2
Ho risposto a SO con un metodo per aggiungere BCC solo a e-mail specifiche e per mantenere le intestazioni esistenti.
Helgatheviking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.