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

Php 在仪表板的电子邮件设置选项卡中添加字段,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我想在WooCommerce>设置>电子邮件选项卡中添加一个字段。在本节中有一个电子邮件模板列表,单击任何模板都可以看到此屏幕 我想为每个模板在此部分添加另一个字段 我设法做到了,但我觉得这不是一个正确的方法 我的代码如下: add_filter( 'woocommerce_settings_tabs_email', 'emailText' ); function emailText($args) { ?> <div class="EmailTe

我想在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

    }
add_filter('woocommerce_settings_tabs_email','emailText');
函数emailText($args){
?>
电子邮件文本

不要使用“woocommerce\u设置\u选项卡\u电子邮件”过滤器,请尝试使用
“woocommerce\u email\u settings\u after”用于创建字段。

woocommerce电子邮件设置选项卡有一个表,其中包含所有可用的电子邮件模板,如“新订单”、“取消订单”、“失败订单”等。这些模板通常通过扩展WC\u电子邮件类来定义。请查看/plugins/woocommerce/includes/email中的示例

正如WildProgrammers所指出的,“woocommerce\u settings\u api\u form\u fields\u{email id}”可以轻松地用于向特定的电子邮件类添加设置。您可以在上看到定义。它为我们提供了电子邮件类的表单字段数组

对于本例,让我们向“新订单”电子邮件模板添加一个附加选项。我们可以查看WC_email_New_Order类构造函数(在WC email New Order.php类中找到)以查找/验证要替换{email id}的id在我们的钩子中。在本例中,WC_Email_New_Order类id为“New_Order”,因此要向新订单选项添加设置或表单字段,我们的钩子将类似于,
add_操作('woocommerce_settings_api_form_fields_New_Order','add_my_custom_Email_setting',10,1);

现在,在“添加\我的\自定义\电子邮件\设置”功能中,我们需要做的就是将新设置添加到表单\字段数组并返回它:

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”函数,以获取如何构建选项数组的示例

您询问如何向所有可用模板添加选项。为此,我们可以为每个电子邮件类手动定义一个挂钩,
add_action('woocommerce_settings_api_form_fields_new_order','add_my_custom_email_setting');
添加操作('woocommerce\u settings\u api\u form\u fields\u failed\u order','add\u my\u custom\u email\u settings');
添加操作('woocommerce\u settings\u api\u form\u fields\u processing\u order','add\u my\u custom\u email\u settings');
…
但是,如果我们可以得到所有id的列表,那么我们可以通过编程来实现。幸运的是,WooCommerce为我们提供了“WooCommerce\u email\u classes”过滤器,该过滤器在WC实例化所有电子邮件类后立即调用。现在,我们所需要的是一个函数,该函数可以迭代“WooCommerce\u email”提供的电子邮件类数组_类的过滤器,获取类id,并为每个id向“woocommerce\u设置\u api\u表单\u字段{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_选项('my_custom_id');


您可能会问,为什么不简单地在“添加电子邮件”自定义设置中将该选项添加到表单字段数组中?

有关于如何使用它的示例吗?这不是一种方式。只是一个简单的一瞥…Stackoverflow是为了帮助人们。这不是一种方式。只是一个简单的一瞥…在Wordpress的世界中,这不仅仅是一种方式…我给了您一个钩子名称。您只需要使用它并创建d您的代码…我没有完整的代码。我还需要构建它…非常棒的答案!它工作得非常好!但是,我尝试使用内置字段类型“wysiwyg”,但这似乎不起作用。电子邮件模板不允许使用它们来避免无效的HTML吗?选项设置似乎不支持wysiwyg。不过,不是100%确定。