2013-02-21 12 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 

機能:

  • fileパラメータで指定された電子メールテンプレートを読み込むorderパラメータ
  • で指定されたIDを持つためにグローバル$order変数を設定します。

これは、コード(あなたは新しいプラグインやいくつかの既存の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更新理由でなければなりません)を追加します。 'function previewEmail(){ \t if(is_admin()){ \t \tグローバル$オーダー; \t \t $ sBaseDir = get_template_directory()。 '/ woocommerce/emails /'; \t \t $ order = new WC_Order($ _ GET ['order']); \t \tには、$ sBaseDir.'email-header.php 'が含まれています。 \t \tには、$ sBaseDirが含まれています。$ _ GET ['file']; \t \tには、$ sBaseDir.'email-footer.php 'が含まれています。 \t} \t return null; } ' – Sjeiti

+0

@David Riccitelli - 「既存のPHPはどういう意味ですか?」私はこれのためだけに新しいプラグインを作成する必要はありませんし、既存のPHPに追加することができるということがわかりません。 – thecommonthread

+0

@commonthread WordPressでロードされているPHPファイル(上記のテーマファイルも有効)に上記を追加することができます –

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

ニースdrrobotnik。私は '$ woocommerce-> mailer'オブジェクトから利用可能な電子メールを取得し、WooCommerceが実際の発信電子メールのようにインラインスタイリングを適用するためにこれを拡張する要点を作成しました。 https://gist.github.com/zlove/3b9b6a611715ec3a8a60 – zlovelady

+0

@drrobotnik:これは最新のWooCommerce(現在は2.4.5)でも動作しますか?結果は私が期待したものではないので、このスクリプトがもはや正しく機能していないのか、テンプレートに問題があるのか​​不思議です。 – inspirednz

+0

@piredlife私はちょっとした微調整を期待せずにコードスニペットに頼っていません。ウー・チェンジログを見ると、私は大きな変化があったと思うし、それはもはや動かないかもしれない。私がこれを投稿したとき、それは完璧ではなかった。私はこれが正しい方向に何人かの人々を指し示したことを願っています。 – drrobotnik

3

私はそれが唯一のデフォルト可能な電子メールテンプレートで動作しますが、これはWooCommerceは、電子メールを管理する方法の性質に起因して、ニーズに合わせて、そのソリューション(プラグイン)を作ってみました。 Github

WordPress Repo

関連する問題