Heute möchte ich Euch zeigen wie man in die Mailbestätigung, die der Kunde nach einem Kauf erhält, seine Rechtstexte (AGB und Widerruf) integrieren kann. Damit ist man dann auch in dieser Hinsicht auf der sicheren Seite und der Kunde hat unmittelbar Zugriff auf diese wichtigen Informationen.
In einem ersten Schritt habe ich meine AGB und meinen Widerruf in eine HTML-Datei gepackt und dieser dann den Namen " rechtstexte.html " gegeben. Gespeichert habe ich diese dann in meinem woocommerce-Ordner in meinem Theme, und zwar in dem Unterordner " emails ". Sollte dieser noch nicht vorhanden sein, dann erstellt diesen bitte. Denn wir benötigen noch eine weitere. Dazu komme ich jetzt.
Nun brauchen wir die Datei " customer-processing-order.php ". Diese liegt im Template Ordner " emails " von WooCommerce. Diese kopieren wir jetzt in unseren eigenen Ordner wie oben beschrieben. Jetzt öffnen wir diese. Diese Datei liegt übrigens noch immer in der Version 1.6.4 vor. Da hat sich also in letzter Zeit nichts verändert. Nun platzieren wir unseren eigenen Hook so ziemlich ans Ende der Datei. Den Hook " woocommerce_email_footer " verwende ich nicht, da dieser auch Anwendung in anderen Kunden-Mails findet und ich nicht möchte, dass in jeglichen Kundennachrichten meine AGB und mein Widerruf angehängt werden. Das Ergebnis sieht dann so aus (Hook farblich markiert):
<?php /** * Customer processing order email * * @author WooThemes * @package WooCommerce/Templates/Emails * @version 1.6.4 */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?> <?php do_action('woocommerce_email_header', $email_heading); ?> <p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p> <?php do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text ); ?> <h2><?php echo __( 'Order:', 'woocommerce' ) . ' ' . $order->get_order_number(); ?></h2> <table cellspacing="0" cellpadding="6" style="width: 100%; border: 1px solid #eee;" border="1" bordercolor="#eee"> <thead> <tr> <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Product', 'woocommerce' ); ?></th> <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Quantity', 'woocommerce' ); ?></th> <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Price', 'woocommerce' ); ?></th> </tr> </thead> <tbody> <?php echo $order->email_order_items_table( $order->is_download_permitted(), true, ( $order->status=='processing' ) ? true : false ); ?> </tbody> <tfoot> <?php if ( $totals = $order->get_order_item_totals() ) { $i = 0; foreach ( $totals as $total ) { $i++; ?><tr> <th scope="row" colspan="2" style="text-align:left; border: 1px solid #eee; <?php if ( $i == 1 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['label']; ?></th> <td style="text-align:left; border: 1px solid #eee; <?php if ( $i == 1 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['value']; ?></td> </tr><?php } } ?> </tfoot> </table> <?php do_action( 'woocommerce_email_after_order_table', $order, $sent_to_admin, $plain_text ); ?> <?php do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text ); ?> <h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2> <?php if ($order->billing_email) : ?> <p><strong><?php _e( 'Email:', 'woocommerce' ); ?></strong> <?php echo $order->billing_email; ?></p> <?php endif; ?> <?php if ($order->billing_phone) : ?> <p><strong><?php _e( 'Tel:', 'woocommerce' ); ?></strong> <?php echo $order->billing_phone; ?></p> <?php endif; ?> <?php wc_get_template( 'emails/email-addresses.php', array( 'order' => $order ) ); ?> <?php do_action('woocommerce_email_anhang_rechtstexte'); ?> <?php do_action( 'woocommerce_email_footer' ); ?>
Nun benötigen wir natürlich noch die zugehörige Funktion in unserer " functions.php ". Diese seht Ihr unten. Zum Verständnis habe ich jede Zeile kommentiert:
<?php function anhang_rechtstexte() { $datei_inhalt=''; //hier wird der Inhalt der Datei gespeichert ob_start(); // Ausgabepuffer, um gesamten Inhalt zu sammeln readfile('Link_zu_Euren_Rechtstexten/rechtstexte.html'); //Datei einlesen $datei_inhalt=ob_get_contents(); // Inhalt in variable speichern ob_end_clean(); //Ausgabepuffer leeren echo $datei_inhalt; // Ausgabe } add_action('woocommerce_email_anhang_rechtstexte','anhang_rechtstexte'); ?>
Fertig. Jetzt werden in jeder Mailbestätigung einer Bestellung die Rechtstexte oder je nach Inhalt der Datei " rechtstexte.html " auch andere Inhalte integriert. Bis zum nächsten Mal.
[fb_share]
Hallo Ralf,
weißt du, wie man den spezifischen Namen des verwendeten Gutscheins in der Mail an den Kunden bzw. in den order details anzeigt?
VG!
Hallo Petra,
habe ich mich noch gar nicht mit beschäftigt. Muss ich mir mal anschauen. Schaffe ich wahrscheinlich aber erst zum Wochenende.
Grüße Ralf
Hallo,
bei mir läuft es scheinbar auch nicht. Aber evtl. liegt es am Pfad für die rechtstexte.html.
Wie muss der Pfad genau lauten?
readfile(‚Link_zu_Euren_Rechtstexten/rechtstexte.html‘);
Danke, Enrico
Hallo Enrico,
hin und wieder funktioniert diese Version nicht. Besser ist eh, den Weg über einen realtiven Pfad zur entsprechenden Datei zu wählen. Im Beispiel unten befindet sich die Datei im (Child-)Theme-Ordner unter ‚woocommerce/emails/rechtstexte.html‘. Also dort, wo sich auch Deine style.css befindet. Der Code sieht folgendermaßen aus:
Dies sollte auf jeden Fall funktionieren. Bitte schreib doch kurz, ob dieser Weg auch bei Dir geht. Dann können auch andere davon profitieren.
Grüße Ralf
Hallo,
danke für die Antwort.
Leider funktioniert es noch nicht, ich habe den Code etwas angepasst (nur die Bezeichnung):
function anhang_impressum() {
$datei_inhalt=“; //hier wird der Inhalt der Datei gespeichert
ob_start(); // Ausgabepuffer, um gesamten Inhalt zu sammeln
$file_dir = get_stylesheet_directory();
$file_dir = $file_dir . ‚woocommerce/emails/emails_impressum.html‘;
readfile ($file_dir); //Datei einlesen
$datei_inhalt=ob_get_contents(); // Inhalt in variable speichern
ob_end_clean(); //Ausgabepuffer leeren
echo $datei_inhalt; // Ausgabe
}
add_action(‚woocommerce_email_anhang_impressum‘,’anhang_impressum‘);
In der Datei „customer_new_account.php steht als letzte Zeile:
Meine Datei heißt: „emails_impressum.html“ und liegt im Verzeichniss: „woocommerce/emails/“ (im Theme-Ornder).
Wenn ich jetzt einen neuen Account registriere, dann bekomme ich zwar eine email, aber ohne die Inhalte der entsprechenden Datei.
Viele Grüße
Enrico
Hallo Enrico,
so wie dies in meinem Beitrag beschrieben wurde, erscheinen die Rechtstexte in der Bestellbestätigungsmail. Daher wird dort auch der Actio-Hook eingebaut: Dieser lautet:
Jetzt ist mir nicht ganz klar, warum Du diese in die Accountregistrierung einbauen möchtest. Auf jeden Fall aber muss dort der Hook stehen. Leider steht in Deiner Nachricht nicht, ob Du dies gemacht hast.
Grüße Ralf
Hallo Ralf,
sorry, irgendwie scheint der Text nicht mit gepostet worden zu sein. Also in der Datei “customer_new_account.php“ steht als letzte Zeile:
Kann ich den Hook denn überhaupt in dieser Form anpassen, oder habe ich da noch zusätzliche Dinge zu beachten?
Ich möchte das in jede Mail einbauen (also nicht nur in die Accountregistrierung), da dummerweise bei WooCommerce jede Mail eine ellenlange Liste von Rechtstexten anfügt… Das möchte ich so in der Form nicht haben.
Danke, Enrico
okay, das scheint so nicht zu klappen, hier noch mal die letzte Zeile:
„do_action(‚woocommerce_email_anhang_impressum‘);‘
allerdings mit „“
Hallo Enrico,
bin leider die ganze Woche unterwegs. Kann nur hin und wieder mal reinschauen. Melde mich in der kommenden Woche, wenn ich mir das etwas genauer angeschaut habe.
Grüße Ralf
Hi!
irgendwas scheint mit dem angegebenen Funktion (Code) für die function.php nicht zu stimmen. Oder wo genau muss man die Funktion reinkopieren. Oder liegt das an meiner aktuellen Version von WooCommerce 2.1.7 (neuere funtion.php)?
Grüße
schemaja
Hi schemaja,
ne, die Funktion läuft auch mit der aktuellen WooCommerce 2.1.7. Die functions.php gehört zu Deinem Theme. Du musst also in Deinem aktivierten Theme-Verzeichnis suchen. Solltest Du ein Child-Theme verwenden, kann es sein, dass Du die functions.php erst anlegen musst. Was läuft denn genau bei Dir nicht?
Grüße
Ralf