Bevor ich diese Frage stelle, weiß ich, dass es ein (legitimes) Zögern gibt, hier Fragen zu Woo-Produkten zu beantworten, da sie ihren eigenen Support haben und ihre Benutzer dazu ermutigt werden sollten, diesen zu verwenden. Ich bin ein zahlender Woo-Benutzer, konnte dies jedoch nicht mit seiner bezahlten Unterstützung lösen. Meine Frage bezieht sich auf das Überschreiben von Klassen in WP, daher hoffe ich, dass es eine faire Anhörung gibt.
Meine Frage: Wenn eine abgeschlossene Bestell-E-Mail an einen Kunden gesendet wird, muss ich diese E-Mail auch wörtlich und automatisch erhalten, genau so, wie sie an den Kunden gesendet wird, und nicht in einem anderen Format, wie es durch die verschiedenen Rechnungs-PDFs erstellt wird Plugins für WooCommerce. Ich kann dies sehr leicht erreichen, indem ich die folgende Zeile in ändere /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() );
lesen:
$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() );
Offensichtlich wird ein solcher Hack ein Upgrade jedoch nicht überleben. Ich habe ein untergeordnetes Thema, das WooCommerce-Vorlagen überschreibt. Gibt es einen äquivalenten Mechanismus, mit dem ich eine Klasse auf ähnlich gekapselte Weise überschreiben kann? Oder können Sie einen alternativen Ansatz empfehlen (abgesehen davon, dass der SMTP-Server so eingestellt ist, dass alle ausgehenden E-Mails an die zweite Adresse gesendet werden), um meine spezifische Aufgabe zu erfüllen, diese E-Mail zu empfangen, wenn der Kunde sie auch empfängt?
Antworten:
Es gibt tatsächlich einen Filter, den Sie verwenden können, siehe
abstract-wc-email.php
Zeile 214:Sie können Folgendes in Ihre functions.php einfügen:
Der einzige Nachteil ist, dass der Empfänger sowohl Ihre als auch seine eigene Adresse im Feld An: sieht.
Alternativ können Sie, basierend auf Steves Antwort, den
woocommerce_email_headers
Filter verwenden. Mit dem übergebenen $ -Objekt können Sie dies nur auf die abgeschlossene Bestell-E-Mail anwenden:quelle
Außerdem gibt es einen weiteren Filter, mit dem Sie auf die Variable $ header zugreifen können, mit der Sie Ihre E-Mails per BCC bearbeiten können, sodass Sie eine Kopie jeder E-Mail erhalten, die an Ihre Kunden bei Woocommerce gesendet wird. Dies ist genauso einfach wie der obige Code, außer dass Ihre Kunden Ihre E-Mail-Adresse nicht sehen.
Genau wie bei der obigen Lösung würden Sie den folgenden Code hinzufügen:
Dieser Filter gilt für alle $ -Header und codiert den Typ auch hart als Text / HTML. Beachten Sie, dass Sie das '/ r / n' nicht in die Deklaration des Inhaltstyps aufnehmen - dies kann zu einem Fehler in wp_mail () führen -, mit dem Woocommerce Ihre Nachrichten sendet.
Ich verwende diesen Code, um zu überprüfen, ob Woocommerce v2.0.14 vorhanden ist. Sollte auch in früheren Versionen funktionieren, ist sich aber nicht sicher, wie lange der Filter enthalten war.
quelle