![](/img/trans.png)
[英]Add the customer email in Woocommerce My Account Dashboard template
[英]Add field in woocommerce email setting tab in dashboard
我想在WooCommerce>設置>電子郵件標簽中添加一個字段。 在此部分中,有一個電子郵件模板列表,單擊任何模板都可以看到此屏幕。
我想為每個模板在此部分添加另一個字段。
我設法實現了目標,但是我感覺它的方法不正確。
我的代碼如下:
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
}
它顯示了該字段,但我無法在其中保存任何內容。
WooCommerce電子郵件設置選項卡的表包含所有可用的電子郵件模板,例如“新訂單”,“取消訂單”,“失敗訂單”等。這些模板通常通過擴展WC_Email類來定義。 以/ plugins / woocommerce / includes / emails為例。
正如WildProgrammers指出的那樣,“ woocommerce_settings_api_form_fields_ {email-id}”可以輕松地用於將設置添加到特定的電子郵件類別。 您可以在WooCommerce設置API代碼參考頁上看到定義。 它為我們提供了電子郵件類的表單域數組。
對於此示例,讓我們向“新訂單”電子郵件模板添加一個附加選項。 我們可以查看WC_Email_New_Order類構造函數(位於class-wc-email-new-order.php中)來查找/驗證ID,以替換鈎子中的{email-id}。 在這種情況下,WC_Email_New_Order類的ID為'new_order',因此要將設置或表單字段添加到新訂單選項中,我們的鈎子將類似於add_action( 'woocommerce_settings_api_form_fields_new_order', 'add_my_custom_email_setting',10,1);
現在,在“ add_my_custom_email_setting”函數中,我們需要做的就是將新設置添加到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類中的'init_form_fields'函數,以獲取有關如何構建options數組的示例。
您詢問了如何向所有可用模板添加選項。 為此,我們可以簡單地為每個電子郵件類手動定義一個鈎子: 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'); ...
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'); ...
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的列表,則可以通過編程方式進行。 對我們來說很幸運WooCommerce為我們提供了“ woocommerce_email_classes”過濾器,該過濾器在WC實例化所有電子郵件類之后立即調用。 現在,我們需要的是一個函數,該函數迭代“ woocommerce_email_classes”過濾器提供的電子郵件類數組,獲取類ID,並為每個id向“ woocommerce_settings_api_form_fields_ {email-id}”添加一個鈎子:
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;
}`
然后,我們可以在模板文件中使用$email->get_option('my_custom_id');
使用此選項$email->get_option('my_custom_id');
。
您可能會問為什么不將選項簡單地添加到add_email_custom_setting中的form_fields數組中?
與其使用“ woocommerce_settings_tabs_email”過濾器,不如嘗試使用“ woocommerce_email_settings_after”鈎子來創建字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.