2017-04-17 9 views
0

私はWooCommerce>設定>電子メールタブでフィールドを追加したいと思っていました。このセクションには電子メールテンプレートのリストがあり、この画面ではどのテンプレートをクリックしても表示されます。ダッシュボードのwoocommerce電子メール設定タブのフィールドを追加してください

enter image description here

私は、すべてのテンプレートについては、このセクションに別のフィールドを追加します。

私はそれを達成することができますが、私はそれが正しい方法ではないと感じています。

私のコードは次の通りである:

add_filter('woocommerce_settings_tabs_email', 'emailText'); 

function emailText($args) { 

     ?> 
     <div class="EmailText"> 
      <label for="EmailText">Email Text</label> 
      <textarea id="EmailText" class="widefat" name="email_text"></textarea> 
     </div> 
     <?php 

    } 

これは、フィールドが表示されますが、私はそれで何かを保存することはできません。

答えて

-1

'woocommerce_settings_tabs_email'フィルタを使用する代わりに、 フィールドを作成するための 'woocommerce_email_settings_after'フックを使用してみてください。

+0

どのように使用するのですか? – Omer

+0

私はちょうどこれのための新しいフック、 'woocommerce_settings_api_form_fields_new_order'を見つけました。 Woocommerceは基本的に電子メールページの設定を生成する一連の設定を作成します。このフィールドを配列の形で既存の配列に追加するだけです。 コードについては、私はあなたを示しています。あなたが完全な仕事をしたい場合は、私を雇う必要があります... – WildProgrammers

+0

その方法では...ちょっと一見... Stackoverflowは人々を助けるためです – Omer

0

「WooCommerce電子メール設定」タブには、「新規注文」、「キャンセルされた注文」、「失敗した注文」など利用可能な電子メールテンプレートがすべて含まれた表があります。これらは通常、WC_Emailクラスを拡張することによって定義されます。例については/ plugins/woocommerce/includes/emailsを見てください。

WildProgrammersが指摘しているように、 'woocommerce_settings_api_form_fields_ {email-id}'は簡単に特定のメールクラスに設定を追加するために使用できます。 WooCommerce Settings API Code Reference pageの定義を見ることができます。これは、電子メールクラスのフォームフィールドの配列を提供します。

この例では、[新しい注文]電子メールテンプレートに追加のオプションを追加できます。 WC_Email_New_Orderクラスのコンストラクタ(class-wc-email-new-order.phpにあります)を見れば、{email-id}を置き換えるIDを見つける/検証できます。この場合、WC_Email_New_Orderクラスidは「new_order」ので、私たちのフックは次のようになりますニューオーダーオプションに設定またはフォームフィールドを追加するには、「add_my_custom_email_setting」関数で今add_action('woocommerce_settings_api_form_fields_new_order', 'add_my_custom_email_setting',10,1);

である私たちが追加されて行う必要があるすべての私たちのform_fieldsアレイへの新しい設定し、それを返す:

function add_my_custom_email_setting($form_fields){ 
    $form_fields['my_custom_id']=['title'=>'My Custom Option', 
            'description'=>'This is a text area we added to the new order email settings page.', 
            'type'=>'textarea', 
            'default'=>'' 
    ]; 

    return $form_fields; 
} 

をオプションの配列を構築する方法の例についてはWC_Email classの「init_form_fields」関数を見てみましょう。

利用可能なすべてのテンプレートにオプションを追加する方法を尋ねました。これを行うには、すべての電子メールクラスに対してフックを手動で定義することができます。 add_action('woocommerce_settings_api_form_fields_new_order','add_my_custom_email_setting'); add_action('woocommerce_settings_api_form_fields_failed_order','add_my_custom_email_setting'); add_action('woocommerce_settings_api_form_fields_processing_order','add_my_custom_email_setting'); ... しかし、すべてのIDのリストを取得できる場合は、代わりにプログラマチックに行うことができます。 Lucky for us WooCommerceは、WCがすべての電子メールクラスをインスタンス化した直後に呼び出される 'woocommerce_email_classes'フィルタを提供します。

add_action('woocommerce_email_classes', 'add_email_custom_setting'); 

function add_email_custom_setting($email_class_list){ 
    foreach($email_class_list as $email_class){ 
     add_action('woocommerce_settings_api_form_fields_' . $email_class->id,'add_my_custom_email_setting',10,1); 
    } 

    return $email_class_list; 
}` 
:今、私たちが必要とするすべては「woocommerce_email_classes」フィルタが提供する電子メールのクラスの配列を反復処理は、クラスIDを取得し、ID毎に「woocommerce_settings_api_form_fields_ {電子メールIDを}」フックを追加する機能があります

$email->get_option('my_custom_id');というテンプレートファイルでこのオプションを使用できます。

add_email_custom_settingのform_fields配列にオプションを追加するだけではどうでしょうか?

関連する問題