So zeigen Sie E-Mail-Vorlagen von Woocommerce an

Lesezeit: 4 Minuten

Ich kann anscheinend keine Option finden, um eine Vorschau der verschiedenen E-Mail-Vorlagen von Woocommerce anzuzeigen. Im Admin-Bereich von Woocommerce gibt es einen Link zur Vorschau der E-Mail „Bestellung erhalten“ für Kunden. Aber ich möchte die an den Administrator gesendete E-Mail „Bestellung erhalten“ bearbeiten und in der Vorschau anzeigen.

Ich habe das WP Better E-Mail-Plugin und die WP-E-Mail-Vorlagen-Plugins ausprobiert, aber sie boten keine Vorschauschaltfläche für alle verschiedenen E-Mails von Woocommerce.

Eine Vorschau der E-Mail-Vorlagen durch das Aufgeben von Bestellungen ist keine Option, da zwischen dem Aufgeben der Bestellung und dem Erhalt der Admin-E-Mail eine Verzögerung von zehn Minuten besteht.

Benutzeravatar von David Riccitelli
David Riccitelli

Am Ende habe ich eine kleine Funktion erstellt, die über das Skript admin-ajax.php ausgeführt wird, z

https://example.org/wp-admin/admin-ajax.php?action=previewemail&file=emails/customer-processing-order.php&order=180

Die Funktion:

  • setzt das Globale $order Variable zur Bestellung mit der in der angegebenen ID order Parameter
  • Laden Sie die in der angegebene E-Mail-Vorlage file Parameter.

Dies ist der Code (Sie müssen ihn in einem neuen Plug-in oder in einem vorhandenen PHP hinzufügen):

/**
 * Open a preview e-mail.
 *
 * @return null
 */
function preview_email()
{
    global $order;

    $filename = $_GET['file'];
    $orderId  = $_GET['order'];

    $order    = new WC_Order($orderId);

    include $filename;

    return null;
}

add_action('wp_ajax_previewemail', 'preview_email');    

  • Schöne Lösung … Ich habe Ihre Methode ein wenig geändert: Prüft auch, ob Sie als Administrator angemeldet sind, fügt die E-Mail-Kopf- und Fußzeile hinzu (muss an einem Woocommerce-Update liegen). function previewEmail() { if (is_admin()) { global $order; $sBaseDir = get_template_directory().'/woocommerce/emails/'; $order = new WC_Order($_GET['order']); include $sBaseDir.'email-header.php'; include $sBaseDir.$_GET['file']; include $sBaseDir.'email-footer.php'; } return null; }

    – Sjeiti

    13. Februar 2014 um 17:11 Uhr


  • @David Riccitelli – was meinst du mit “etwas vorhandenes PHP?” Ich möchte nicht nur dafür ein neues Plugin erstellen müssen, und ich bin mir nicht sicher, was Sie meinen, dass Sie es einfach zu einem vorhandenen PHP hinzufügen können.

    – die allgemeine Monatslektüre

    23. Oktober 2014 um 21:38 Uhr

  • @thecommonthread Sie können das Obige zu jeder PHP-Datei hinzufügen, die von WordPress geladen wird (auch eine Themendatei würde funktionieren).

    – David Riccitelli

    26. Oktober 2014 um 9:43 Uhr

  • Ich habe eine Vorlagendatei, die Woocommerce-Hooks und einige andere Inhalte enthält. Die Vorschau zeigt den Inhalt der Datei gemäß dem obigen Code. Aber die Hooks werden nicht ausgeführt. Irgendwelche Gedanken?

    – melwin

    9. November 2020 um 14:26 Uhr


  • Wenn Sie mit Hooks Shortcodes meinen, können Sie die Ausgabe puffern und dann do_shortcode darauf aufrufen (ob_start(); … ob_get_contents(); … ).

    – David Riccitelli

    9. November 2020 um 16:51 Uhr

Modifizierte Version der obigen Antwort mit integrierten Woo-Funktionen. Der Vorteil ist, dass es sowohl in Ihrem Design als auch im Standard-Plugin-Vorlagenpfad nachsieht.

/**
 * Open a preview e-mail.
 *
 * @return null
 */
function previewEmail() {

    if (is_admin()) {
        $default_path = WC()->plugin_path() . '/templates/';

        $files = scandir($default_path . 'emails');
        $exclude = array( '.', '..', 'email-header.php', 'email-footer.php','plain' );
        $list = array_diff($files,$exclude);
        ?><form method="get" action="<?php echo site_url(); ?>/wp-admin/admin-ajax.php">
<input type="hidden" name="order" value="2055">
<input type="hidden" name="action" value="previewemail">
        <select name="file">
        <?php
        foreach( $list as $item ){ ?>
            <option value="<?php echo $item; ?>"><?php echo str_replace('.php', '', $item); ?></option>
        <?php } ?>
        </select><input type="submit" value="Go"></form><?php
        global $order;
        $order = new WC_Order($_GET['order']);
        wc_get_template( 'emails/email-header.php', array( 'order' => $order ) );


        wc_get_template( 'emails/'.$_GET['file'], array( 'order' => $order ) );
        wc_get_template( 'emails/email-footer.php', array( 'order' => $order ) );

    }
    return null; 
}

add_action('wp_ajax_previewemail', 'previewEmail');

  • Schöner Drobotnik. Ich habe ein Kernstück erstellt, das dies erweitert, um die verfügbaren E-Mails aus dem abzurufen $woocommerce->mailer -Objekt zu verwenden und Inline-Styling anzuwenden, wie es WooCommerce bei tatsächlichen ausgehenden E-Mails tut. Sehen gist.github.com/zlove/3b9b6a611715ec3a8a60

    – zlovelady

    26. Mai 2015 um 19:31 Uhr


  • @drrobotnik: Funktioniert das noch im neuesten WooCommerce (derzeit 2.4.5)? Das Ergebnis ist nicht das, was ich erwartet hatte, daher frage ich mich, ob dieses Skript nur nicht mehr richtig funktioniert oder ob es ein Problem mit meinen Vorlagen ist.

    – inspiriertnz

    23. August 2015 um 6:05 Uhr

  • @inspiriertes Leben. Ich würde mich nicht auf Codeausschnitte verlassen, ohne die Erwartung einer kleinen Optimierung. Wenn ich mir das Woo-Änderungsprotokoll ansehe, denke ich, dass es bedeutende Änderungen gegeben hat und es möglicherweise nicht mehr funktioniert. Als ich das gepostet habe, war es nicht perfekt. Ich hoffe, dass dies einige Leute in die richtige Richtung gewiesen hat.

    – drrobotnik

    12. September 2015 um 3:22 Uhr


Ich habe eine Lösung (Plugin) entwickelt, die Ihren Anforderungen entsprechen könnte, obwohl sie nur mit den standardmäßig verfügbaren E-Mail-Vorlagen funktioniert, liegt dies an der Art und Weise, wie WooCommerce E-Mails verwaltet. GitHub

WordPress-Repository

1392240cookie-checkSo zeigen Sie E-Mail-Vorlagen von Woocommerce an

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy