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数组中?
任何关于如何使用它的例子? – Omer
我刚刚发现了一个新的钩子'woocommerce_settings_api_form_fields_new_order'。 Woocommerce基本上创建了一系列设置来在电子邮件页面上生成设置。你只需要将这个字段以数组的形式添加到现有的数组中。 代码,我告诉你的方式。如果你想完成工作,那么你需要雇用我... – WildProgrammers
它不是一种方式..只是一瞥... Stackoverflow是帮助人们 – Omer