Wie kann man dem Kunden ein PDF oder mehrere PDF-Dateien wie z.B. AGB oder Widerrufsbelehrung als Anhang in der WooCommerce Bestell-Email mitsenden? Das geht auch ohne Plugin mit einer Funktion in der functions.php des Themes.
Die PDF-Dateien wie AGB und Widerruf kann man dazu direkt im Theme-Ordner ablegen, in meinem Beispiel z.B. unter [wp-content/themes/deintheme/woocommerce/…]. Je nachdem, ob man ein Main-Theme oder ein Child-Theme benutzt, unterscheidet sich der Aufruf des URL-Pfads:
- Main-Theme: $agb_pdf_path = get_template_directory()
- Childtheme: $agb_pdf_path = get_stylesheet_directory()
Im Beispiel hier unten wird ein Child-Theme benutzt, hier liegen die Dateien „AGB.pdf“ und „Widerrufsformular.pdf“ also im Ordner [/wp-content/themes/child-theme/woocommerce/AGB.pdf].
Die Zeilen mit // vorne dran sind Kommentare bzw. auskommentierte Funktionen. Diese können bei Bedarf als alternative Funktion genutzt werden.
1. Code für Ablage der PDFs im Theme-Ordner
/* PDF-Dateien wie AGB oder Widerruf als Anhang in den WooCommerce Emails mitsenden */
add_filter( 'woocommerce_email_attachments', 'attach_agb_pdf_to_email', 10, 3);
function attach_agb_pdf_to_email ( $attachments, $email_id, $order ) {
// Hier erfolgt der Versand nur an Bestellbestätigung des Kunden customer_processing_order Mails
// $email_ids = array( 'customer_processing_order' );
$email_ids = array( 'customer_processing_order' );
if ( in_array ( $email_id, $email_ids ) ) {
// Hier erfolgt der Versand an mehrere, z.B. new order und customer_processing_order Mails
// $email_ids = array( 'new_order', 'customer_processing_order' );
// Bei Nutzung eines Child-Themes wird dieser Verzeichnispfad genutzt /wp-content/themes/childtheme/woocommerce/xyz.pdf
$agb_path = get_stylesheet_directory() . '/woocommerce/AGB.pdf'; //
$widerruf_path = get_stylesheet_directory() . '/woocommerce/Widerrufsformular.pdf';
// Bei Nutzung eines Haupt-Themes wird dieser Verzeichnispfad genutzt /wp-content/themes/haupttheme/woocommerce/xyz.pdf
// $agb_path = get_template_directory() . '/woocommerce/AGB.pdf'; // Verzeichnis des aktuelles Themes
// $widerruf_path = get_template_directory() . '/woocommerce/Widerrufsformular.pdf'; // Verzeichnis des aktuelles Themes
$attachments[] = $agb_path;
$attachments[] = $widerruf_path; }
{
return $attachments; }
}
2. Code für Ablage der PDFs in der Mediathek
Alternativ kann man die PDFs anstatt im Theme-Ordner auch direkt in die WordPress-Mediathek hochladen. Welche Methode man bevorzugt, bleibt einem selbst überlassen. Der Code sieht dann so aus:
/* PDF-Dateien wie AGB oder Widerruf als Anhang in den WooCommerce Emails mitsenden */
add_filter( 'woocommerce_email_attachments', 'attach_agb_pdf_to_email', 10, 3);
function attach_agb_pdf_to_email ( $attachments, $email_id, $order ) {
// Versand nur an Bestellbestätigung des Kunden customer_processing_order Mails
// $email_ids = array( 'customer_processing_order' );
$email_ids = array( 'customer_processing_order' );
if ( in_array ( $email_id, $email_ids ) ) {
// Versand an mehrere, z.B. new order und customer_processing_order Mails
// $email_ids = array( 'new_order', 'customer_processing_order' );
// Upload der PDFs in die Mediathek, URL-Pfad entsprechend anpassen
$upload_dir = wp_cmsrieupload_dir();
$attachments[] = $upload_dir['basedir'] . "/2023/03/AGB.pdf";
$attachments[] = $upload_dir['basedir'] . "/2023/03/Widerrufsformular.pdf"; }
{
return $attachments; }
}
Die WooCommerce email IDs
WooCommerce verschickt je – nach Bestellstatus – unterschiedliche E-Mails an den Administrator und Kunden. Diese werden über den Wert $email_ids im Code angesteuert. So kann man steuern, an welche WooCommerce E-Mails die PDF-Dateien angehängt werden sollen.
- 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
Kann man da auch einstellen, dass es das nur bei bestimmten Emails versendet? Ich habe 2 Kurse bei denen es eine bestimmte PDF mit verschicken soll. Ist das über PHP möglich?
Das ist etwas sehr speziell, aber theoretisch möglich über die product ID der Kurse und einen weiteren „Conditional Logic“ Filter im Code. Wenn Sie dazu einen Kostenvoranschlag haben möchten, können Sie mich gerne kontaktieren. Vielen Dank für Ihr Verständnis!
Wo genau hast du den Code eingebaut? welche php nimmst du dafür?
Der Code muss in die functions.php Datei Deines Themes eingefügt werden. …wp-content/themes/deintheme/functions.php…
Ich habe den Code eingebaut und auch die Dateien ins richtige Child-Theme geladen, allerdings wird bei mir gar nichts mitgesendet.
Die Bezeichnung der Dateien angepasst?
Pfad für die PDFs korrekt? wp-content/themes/deintheme/woocommerce/
Hallo Andy,
Du brauchst $attachments_agb[] = $agb_pdf_path; unter jedem PDF-Aufruf. Ich hab das Beispiel oben ausgebessert, probiere es doch damit nochmal.