Code richtig einfügen aber wie?

Hallo bin absoluter PHP Neubeginner…

Ich möchte bei WooCommerce Dateien wie AGB, Wiederrufsbelehrung und Datenschutzerklärung als PDF anfügen. Ich habe heute auch fleißig gegooglet und gefunden wie der Code dazu aussehen muss. Nur scheint es als ob ich diesen nicht korrekt in die functions.php einzufüge.

Meine PHP Datei sieht so aus:

<?php
/**
* Child theme stylesheet einbinden in Abhängigkeit vom Original-Stylesheet
*/

function child_theme_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-theme-css', get_stylesheet_directory_uri() .'/style.css' , array('parent-style'));

}
add_action( 'wp_enqueue_scripts', 'child_theme_styles' );?>

Und das hier will ich einfügen:

add_filter( 'woocommerce_email_attachments', 'my_email_attachments', 10, 3);
function my_email_attachments ( $attachments , $id, $object ) {
	
	if( $id === 'customer_completed_order')
	if( $id === 'customer_invoice')
	if( $id === 'customer_processing_order') {

		$attachment_path = get_stylesheet_directory() . '/anhang/AGB.pdf';
		$attachments[] = $attachment_path;
		
		$attachment_path = get_stylesheet_directory() . '/anhang/Widerruf.pdf';
		$attachments[] = $attachment_path;

	}
	
	return $attachments;
}

Wo genau muss ich das einfügen oder ist das ganze Fehlerhaft? Ich freue mich auf Nachrichten, die mir hoffentlich weiterhelfen.

Besten Dank!

Hallo,

bin selbst kein PHP-Experte, aber mir fallen sofort zwei Sachen ins Auge.

Du hast am Anfang drei if-Bedingungen, die aber nicht verknüpft sind.
So wie der Code jetzt ist, werden die ersten beiden ifs wohl ignoriert und der Code nur im dritten Fall ausgeführt. Ich schätze mal, dass du du aber ein ODER möchtest, daher solltest du die drei ifs mit ||verbinden und zu einem zusammenfügen.

Innerhalb des Code-Blocks initialisierst du das $attachments-Array zweimal.
Die AGB würden daher verloren gehen und das Ergebnis würde nur Widerruf enthalten. Du solltest hier besser array_push verwenden.

Gruß,
Steve

Ich würde es zwischen dem letzten Semikolon und dem letzten Fragezeichen probieren.

1 Like

ok?

Und du solltest Dich mit PHP, WP und WooCommerce etwas intensiver beschäftigen, denn wenn du hier etwas falsch machst, kommst nicht mal mehr auf das WP-Dashboard, sondern musst die functions.php wieder herrichten.

Oder du lässt es dir von jemanden machen, der auch etwas Ahnung davon hat.

Ach ja, das mit den "if"s wurde eh schon gesagt, deine functions.php wird nimmer funktionieren und dein WordPress wird ziemlich herumzicken.

gehört auf

 if (( $id === 'customer_completed_order') ||
   ( $id === 'customer_invoice')  ||
   ( $id === 'customer_processing_order')) {

geändert.

Grüße,
Tomh

PS: Es gibt einerseits Plug-Ins, die so etwas wesentlich einfacher machen, andrerseits kann man die Mails-Templates von WooCommerce direkt ändern, inkl. Anhänge hinzufügen usw.

Vielen Dank!

Besten Dank, Sebastian!