9

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

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

不能通过下订单来预览电子邮件模板,因为下订单和收到管理员电子邮件之间有十分钟的延迟。

4

3 回答 3

11

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

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

功能:

  • 将全局变量设置为参数$order中指定的 id 的顺序order
  • 加载参数中指定的电子邮件模板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');    
于 2013-05-27T12:14:21.503 回答
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');
于 2014-11-21T23:28:01.607 回答
6

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

WordPress 回购

于 2016-04-15T10:49:16.293 回答