在仪表板的woocommerce电子邮件设置选项卡中添加字段

时间:2017-04-17 11:21:24

标签: php wordpress 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

    }

显示该字段但我无法保存任何内容。

2 个答案:

答案 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'用于创建字段的钩子。