2013-02-21 79 views
8

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

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

通过下订单预览电子邮件模板不是一种选择,因为在下订单和收到管理员电子邮件之间有10分钟的时间滞后。

回答

11

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

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

功能:

  • 全球$order变量设置为与在order参数
  • 负荷指定的file参数指定电子邮件模板的ID的顺序。

这是代码(您必须添加一个新的插件或在一些现有的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');  
+2

很好的解决方案...... 我已经改变了你的方法一点:还要检查,如果你登录的管理员,增加了电子邮件的页眉和页脚(必须是因为Woocommerce更新)。功能previewEmail(){ \t if(is_admin()){ \t \t global $ order; \t \t $ sBaseDir = get_template_directory()。'/ woocommerce/emails /'; \t \t $ order = new WC_Order($ _ GET ['order']); \t \t include $ sBaseDir.'email-header.php'; \t \t include $ sBaseDir。$ _ GET ['file']; \t \t include $ sBaseDir.'email-footer.php'; \t} \t return null; }' – Sjeiti 2014-02-13 17:11:44

+0

@David Riccitelli - 你的意思是“一些现有的PHP?”我不想为此创建一个新的插件,我不确定你的意思,你可以将它添加到一些现有的PHP。 – thecommonthread 2014-10-23 21:38:37

+0

@thecommonthread你可以将上述内容添加到由WordPress加载的任何PHP文件(也可以使用主题文件) – 2014-10-26 09:43:50

7

修改了上面的回答版本使用内置佑功能。好处是它会同时查看主题和默认插件模板路径。

/** 
* 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'); 
+2

Nice drrobotnik。我创建了一个扩展这个的主题来抓取'$ woocommerce-> mailer'对象中的可用电子邮件,并应用内联样式,就像WooCommerce对实际发送的电子邮件所做的那样。见https://gist.github.com/zlove/3b9b6a611715ec3a8a60 – zlovelady 2015-05-26 19:31:32

+0

@drrobotnik:这是否仍然在最新的WooCommerce(目前2.4.5)中工作?结果不是我所期望的,所以我想知道是否这只是该脚本不再正常运行,或者它是否与我的模板有关。 – inspirednz 2015-08-23 06:05:31

+0

@inspiredlife。我不会依赖代码片段而没有期望稍微调整。看着Woo changelog,我认为已经发生了重大变化,并且可能不再有效。当我发布这个时,它并不完美。我确实希望这能指出一些人正确的方向。 – drrobotnik 2015-09-12 03:22:33

3

,我想出了一个解决方案(插件)可能会满足您的需求,虽然它仅是由于WooCommerce是如何管理电子邮件的特性默认可用的电子邮件模板,这是工作。 Github

WordPress Repo