【问题标题】:How to preview email templates of Woocommerce如何预览 Woocommerce 的电子邮件模板
【发布时间】:2013-02-07 01:08:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: wordpress email templates preview woocommerce


    【解决方案1】:

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

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

    功能:

    • 将全局$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');    
    

    【讨论】:

    • 不错的解决方案...我稍微改变了您的方法:还检查您是否以管理员身份登录,添加电子邮件页眉和页脚(必须是因为 Woocommerce 更新)。 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; }
    • @David Riccitelli - “一些现有的 php”是什么意思?我不想为此创建一个新插件,我不确定你的意思是你可以将它添加到一些现有的 PHP 中。
    • @thecommonthread 您可以将以上内容添加到 WordPress 加载的任何 PHP 文件中(主题文件也可以使用)
    • 我有一个模板文件,其中包含 woocommerce 钩子和其他一些内容。预览按照上面的代码显示文件的内容。但是钩子没有被执行。有什么想法吗?
    • 如果通过钩子你的意思是短代码,你可以缓冲输出,然后在其上调用 do_shortcode (ob_start(); ... ob_get_contents(); ...)。
    【解决方案2】:

    使用内置 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');
    

    【讨论】:

    • 不错的 drrobotnik。我为此创建了一个要点,以从$woocommerce-&gt;mailer 对象中获取可用的电子邮件并应用内联样式,就像 WooCommerce 对实际传出的电子邮件所做的那样。见gist.github.com/zlove/3b9b6a611715ec3a8a60
    • @drrobotnik:这在最新的 WooCommerce(当前为 2.4.5)中仍然有效吗?结果不是我所期望的,所以我想知道是这个脚本不再正常运行,还是我的模板有问题。
    • @inspiredlife。如果没有一点调整的期望,我不会依赖代码 sn-ps。查看 Woo 变更日志,我认为已经发生了重大变化,它可能不再起作用。当我发布这个时,它并不完美。我确实希望这能为一些人指明正确的方向。
    【解决方案3】:

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

    WordPress Repo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2017-05-26
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      相关资源
      最近更新 更多