Wie kann ich bei WooCommerce Anhänge (AGB, Datenschutz, etc.) zu den Bestell-E-Mails hinzufügen? (2023, Anleitung)
Marc Wagner
Januar 23, 2023
WooCommerce ermöglicht es dir, mit ein paar wenigen Zeilen Code, Anhänge zu deinen Bestell-E-Mails hinzuzufügen. Bei jeder Bestellung werden dann z.B. die AGB, Datenschutzerklärung oder die Widerrufsbelehrung direkt mit übermittelt. Das gilt natürlich auch für andere Dateiformate. Es muss nicht unbedingt ein PDF-Dokument sein.
Dieses PHP Snippet erweitert deine E‑Mail Bestellungen um einen PDF-Anhang #
Kopiere den folgenden Code einfach und füge diesen in die “functions.php” deines WordPress-Themes ein. Die Datei findest du hier: wp-content/themes/{name-des-child-themes}/functions.php.
Achtung: Bevor du Dateien bearbeitest, solltest du unbedingt ein Backup der Datei machen. Alternativ kannst du auch mit Duplicator alle Daten deiner Webseite direkt sichern. Eine Anleitung für Duplicator findest du hier: Duplicator Anleitung.
Schritt 1: Filter woocommerce_email_attachments einbauen #
Um Anhänge hinzuzufügen, können wir auf den Filter woocommerce_email_attachments zugreifen. Hierzu fügen wir folgenden Code in die functions.php im Child-Theme ein:
/** * Add an attachment to the WooCommerce mails. */ add_filter( 'woocommerce_email_attachments', 'attach_file_to_order_emails', 10, 3);
Schritt 2: Funktion hinzufügen #
Als nächstes fügen wir unterhalb des Filters die Funktion ein, die es uns ermöglicht, WooCommerce mitzuteilen, welche Dateien als Anhänge zu den jeweiligen E‑Mail-Templates geladen werden sollen.
/** * @param array<string> $attachments beinhaltet die Pfade zu den Anhängen für die jeweilige Mail * @param string $mail_id die ID der Mail, die versendet wird (z.B. "new_order" für eine neue Bestellung) * @param \WC_Order $order das Bestellobjekt * * @return array<string> **/ function attach_file_to_order_emails( $attachments , $mail_id, $order ) { ... }
Schritt 3: Abfragen, ob eine Bestellung existiert #
Zunächst prüfen wir in der Funktion, ob die Bestellung ausgeführt wurde. Hierzu fragen wir das Bestellobjekt und die Mail-ID ab.
if( ! is_a( $order, 'WC_Order' ) || ! isset( $mail_id) ) { return $attachments; }
Schritt 4.1: Anhänge hinzufügen und zurückgeben #
Zum Schluss kommen wir zur eigentlichen Aufgabe der Funktion — dem Hinzufügen der Anhänge zu der von WooCommerce versendeten E‑Mail. Die dazugehörigen Anhänge liegen in unserem Beispiel im Hauptverzeichnis des Child-Themes (/wp-content/themes/twentytwentyone/agb.pdf).
$attachments[] = get_stylesheet_directory() . '/agb.pdf'; return $attachments;
Schritt 4.2: Anhänge nach Mail-ID #
Es ist auch möglich, Anhänge nur für bestimmte Mail-ID’s zu versenden. Für WooCommerce stehen folgende Mail-ID’s zur Verfügung:
- new_order
- customer_on_hold_order
- customer_processing_order
- customer_refund_order
- customer_refunded_order
- customer_partially_refunded_order
- cancelled_order
- failed_order
- customer_reset_password
- customer_invoice
- customer_new_account
- customer_note
Möchtest du zum Beispiel deine Anhänge nur zu einer neuen Bestellung hinzufügen, kannst du deine Funktion um folgende Abfrage ergänzen.
if($mail_id === 'new_order' ) { $attachments[] = get_stylesheet_directory() . '/agb.pdf'; }
Zusammenfassung #
Hier noch einmal der komplette PHP-Code für die functions.php in deinem Child-Theme. Beachte, dass hiermit zu jeder von WooCommerce versendeten E‑Mail die Anhänge hinzugefügt werden.
/** * Add an attachment to the WooCommerce mails. */ add_filter( 'woocommerce_email_attachments', 'attach_file_to_order_emails', 10, 3); /** * @param array<string> $attachments beinhaltet die Pfade zu den Anhängen für die jeweilige Mail * @param string $mail_id die ID der Mail, die versendet wird (z.B. "new_order" für eine neue Bestellung) * @param \WC_Order $order das Bestellobjekt * * @return array<string> **/ function attach_file_to_order_emails( $attachments , $mail_id, $order ) { if( ! is_a( $order, 'WC_Order' ) || ! isset( $mail_id) ) { return $attachments; } // use get_template_directory if you do not use a child theme. $attachments[] = get_stylesheet_directory() . '/agb.pdf'; return $attachments; }
Und hier das PHP-Code-Snippet, das Anhänge nur zu neuen Bestellungen hinzufügt.
/** * Add multiple attachments to the WooCommerce mails. */ add_filter( 'woocommerce_email_attachments', 'attach_file_to_order_emails', 10, 3); /** * @param array<string> $attachments beinhaltet die Pfade zu den Anhängen für die jeweilige Mail * @param string $mail_id die ID der Mail, die versendet wird (z.B. "new_order" für eine neue Bestellung) * @param \WC_Order $order das Bestellobjekt * * @return array<string> **/ function attach_file_to_order_emails( $attachments , $mail_id, $order ) { if( ! is_a( $order, 'WC_Order' ) || ! isset( $mail_id) ) { return $attachments; } if($mail_id === 'new_order' ) { // use get_template_directory if you do not use a child theme. $attachments[] = get_stylesheet_directory() . '/agb.pdf'; } return $attachments; }
So kannst du mehrere Anhänge an deine WooCommerce E‑Mails anfügen #
Es ist auch möglich, einfach mehrere Dateien anzufügen. Hierfür müssen wir das PHP Snippet von oben nur etwas anpassen. Hier ein Beispiel:
/** * Add multiple attachments to the WooCommerce mails. */ add_filter( 'woocommerce_email_attachments', 'attach_file_to_order_emails', 10, 3); function attach_file_to_order_emails( $attachments , $mail_id, $order ) { if( ! is_a( $order, 'WC_Order' ) || ! isset( $mail_id) ) { return $attachments; } // use get_template_directory if you do not use a child theme. $path = get_stylesheet_directory(); $attachments[] = $path.'/agb.pdf'; $attachments[] = $path.'/datenschutz.pdf'; $attachments[] = $path.'/widerruf.pdf'; return $attachments; }
Damit werden direkt drei Dateien hinzugefügt.
Beschränke die Anhänge auf verschiedene E‑Mail Typen #
WooCommerce versendet verschiedene E‑Mails. Die beiden Snippets oben werden bei jeder Bestellung versendet. Du kannst das ganze aber noch weiter einschränken, indem du die $mail_id abfragst. Hier eine Liste aller möglichen Werte:
- new_order
- customer_on_hold_order
- customer_processing_order
- customer_refund_order
- customer_refunded_order
- customer_partially_refunded_order
- cancelled_order
- failed_order
- customer_reset_password
- customer_invoice
- customer_new_account
- customer_note
Möchtest du etwa die AGB nur bei einer neuen Bestellung als Anhang beifügen, kannst du das Snippet von oben wie folgt anpassen:
/** * Add multiple attachments to the WooCommerce mails. */ add_filter( 'woocommerce_email_attachments', 'attach_file_to_order_emails', 10, 3); function attach_file_to_order_emails( $attachments , $mail_id, $order ) { if( ! is_a( $order, 'WC_Order' ) || ! isset( $mail_id) || $mail_id !== 'new_order' ) { return $attachments; } // use get_template_directory if you do not use a child theme. $path = get_stylesheet_directory(); $attachments[] = $path.'/agb.pdf'; $attachments[] = $path.'/datenschutz.pdf'; $attachments[] = $path.'/widerruf.pdf'; return $attachments; }
Das war es auch schon. Jetzt werden die Anhänge die du definiert hast nur noch an neue Bestellungen angehangen. Das kannst du natürlich beliebig anpassen in dem “new_order” mit einem Wert aus der Liste oben vertauscht.
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.