如何预览Woocommerce的电子邮件模板

fer*_*lde 8 email wordpress templates preview woocommerce

我似乎无法找到预览Woocommerce的不同电子邮件模板的选项.在Woocommerce的管理部分,有一个链接可以为客户预览"订单收到"电子邮件.但我想编辑和预览发送给管理员的"订单收到"电子邮件.

我已经尝试了WP Better emails插件和WP电子邮件模板插件,但他们没有为Woocommerce的所有不同电子邮件提供预览按钮.

通过下订单预览电子邮件模板不是一种选择,因为在下订单和收到管理员电子邮件之间存在十分钟的延迟.

Dav*_*lli 11

我最终创建了一个小函数,它通过admin-ajax.php脚本执行,例如

https://example.org/wp-admin/admin-ajax.php?action=previewemail&file=emails/customer-processing-order.php&order=180
Run Code Online (Sandbox Code Playgroud)

功能:

  • 将全局$order变量设置为具有order参数中指定的id的顺序
  • 加载file参数中指定的电子邮件模板.

这是代码(你必须添加一个新的插件或在一些现有的PHP中):

/**
 * 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');    
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案......我已经改变了你的方法:还检查你是否以管理员身份登录,添加电子邮件页眉和页脚(必须是因为Woocommerce更新).`function previewEmail(){if(is_admin()){global $ order; $ sBaseDir = get_template_directory().'/ woocommerce/emails /'; $ order = new WC_Order($ _ GET ['order']); 包括$ sBaseDir.'email-header.php'; include $ sBaseDir.$ _ GET ['file']; 包括$ sBaseDir.'email-footer.php'; } return null; }` (2认同)

drr*_*nik 8

使用内置的woo函数修改上述答案的版本.好处是它将同时查看您的主题和默认插件模板路径.

/**
 * 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');
Run Code Online (Sandbox Code Playgroud)

  • 好drrobotnik.我创建了一个扩展的主旨,以获取来自`$ woocommerce-> mailer`对象的可用电子邮件,并应用内联样式,就像WooCommerce对实际外发电子邮件所做的那样.请参阅https://gist.github.com/zlove/3b9b6a611715ec3a8a60 (2认同)

Dig*_*ber 5

我提出了一个可能满足您需求的解决方案(插件),尽管它仅适用于默认的可用电子邮件模板,这是由于WooCommerce管理电子邮件的性质所致。Github

WordPress回购