簡體   English   中英

在儀表板的woocommerce電子郵件設置選項卡中添加字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM