「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配列にオプションを追加するだけではどうでしょうか?
どのように使用するのですか? – Omer
私はちょうどこれのための新しいフック、 'woocommerce_settings_api_form_fields_new_order'を見つけました。 Woocommerceは基本的に電子メールページの設定を生成する一連の設定を作成します。このフィールドを配列の形で既存の配列に追加するだけです。 コードについては、私はあなたを示しています。あなたが完全な仕事をしたい場合は、私を雇う必要があります... – WildProgrammers
その方法では...ちょっと一見... Stackoverflowは人々を助けるためです – Omer