2017-04-17 103 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中找到)來查找/驗證id以替換我們的hook中的{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; 
} 

在「init_form_fields」功能,看看在WC_Email class對於如何建立的選項陣列的例子。

您問過如何爲所有可用模板添加一個選項。要做到這一點,我們可以簡單地爲每個電子郵件類別手動定義一個鉤子,但是如果我們可以獲得所有ID的列表,那麼我們可以用編程方式代替它。幸運的是,WooCommerce爲我們提供了'WCocommerce_email_classes'過濾器,它在WC實例化所有電子郵件類後立即被調用。現在,我們需要的是一個函數,由「woocommerce_email_classes」過濾器提供的電子郵件類陣列上迭代,獲取類的ID,以及鉤添加到「woocommerce_settings_api_form_fields_ {電子郵件-ID}」每個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');中使用此選項。

您可能會問爲什麼不直接將該選項添加到add_email_custom_setting中的form_fields數組中?

相關問題