2017-04-17 106 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数组中?

相关问题