我想在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
}
显示该字段但我无法保存任何内容。
答案 0 :(得分:2)
“WooCommerce电子邮件设置”标签包含一个表格,其中包含所有可用的电子邮件模板,例如“新订单”,“已取消订单”,“订单失败”,&#39;这些通常通过扩展WC_Email类来定义。查看/ plugins / woocommerce / includes / emails中的示例。
WildProgrammers已经指出,&#39; woocommerce_settings_api_form_fields_ {email-id}&#39;可以轻松地将设置添加到特定的电子邮件类。您可以在WooCommerce Settings API Code Reference page上看到该定义。它为我们提供了电子邮件类的表单字段数组。
对于此示例,我们可以为“新订单”添加其他选项。电子邮件模板我们可以查看WC_Email_New_Order类构造函数(在class-wc-email-new-order.php中找到)来查找/验证要在我们的钩子中替换{email-id}的id。在这种情况下,WC_Email_New_Order类ID是&#39; new_order&#39;因此,要将设置或表单字段添加到新订单选项,我们的挂钩将显示为add_action( 'woocommerce_settings_api_form_fields_new_order', 'add_my_custom_email_setting',10,1);
现在在&#39; add_my_custom_email_setting&#39;函数我们需要做的就是将我们的新设置添加到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;
}
看一下&#39; init_form_fields&#39;函数WC_Email class中有关如何构建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');
...
但是如果我们能够获得所有id的列表,那么我们可以以编程方式进行。幸运的是,WooCommerce为我们提供了&woocommerce_email_classes&#39;在WC实例化所有电子邮件类之后立即调用的过滤器。现在我们所需要的只是一个函数,它迭代了&#39; woocommerce_email_classes&#39;提供的电子邮件类数组。过滤,获取课程ID,并添加一个钩子给&#39; woocommerce_settings_api_form_fields_ {email-id}&#39;对于每个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数组?
答案 1 :(得分:-1)
而不是使用'woocommerce_settings_tabs_email'过滤器尝试使用 'woocommerce_email_settings_after'用于创建字段的钩子。