WooCommerce 的 MailChimp:在结帐字段中间添加复选框

Posted

技术标签:

【中文标题】WooCommerce 的 MailChimp:在结帐字段中间添加复选框【英文标题】:MailChimp for WooCommerce: Add the checkbox in the middle of the checkout fields 【发布时间】:2021-07-21 20:30:31 【问题描述】:

MailChimp for WooCommerce 插件很棒,但我刚刚获得了一个设计,其中 WooCommerce 结帐中的 '订阅我们的时事通讯' 复选框紧跟在电子邮件字段之后,而不是在特定部分的底部:

该插件允许您在希望复选框出现的位置输入动作挂钩;例如woocommerce_checkout_before_customer_detailswoocommerce_after_checkout_billing_form 等,它允许您将复选框放在某个部分之前或之后(只要有一个钩子),但不能放在各个字段中.

有没有办法将 MailChimp 复选框添加到特定字段之前或之后的特定点?

【问题讨论】:

【参考方案1】:

结帐字段在循环中输出,循环使用woocommerce_form_field() 函数回显每个字段:

$fields = $checkout->get_checkout_fields( 'billing' );

foreach ( $fields as $key => $field ) 
    woocommerce_form_field( $key, $field, $checkout->get_value( $key ) );

这个函数对于每个特定的字段类型(例如woocommerce_form_field_email)都有许多过滤器,但是没有action钩子。

但是,您可以使用这些过滤器之一,并使用一些技巧来添加您自己的钩子:

///
//  Add MailChimp checkbox after email field
///

function vnm_mc_after_email_field($field, $key, $args, $value) 
    ob_start();

    do_action('vnm_before_email_field');

    echo $field;

    do_action('vnm_after_email_field');

    return ob_get_clean();


add_filter('woocommerce_form_field_email', 'vnm_mc_after_email_field', 10, 4);

由于 WordPress 过滤器总是必须返回发送给它的第一个参数的版本(在本例中为 $field),我们所做的就是打开输出缓冲区,为字段之前和之后添加我们自己的操作(@ 987654328@,vnm_after_email_field),然后返回输出缓冲区。

然后,在 WooCommerce->MailChimp->Audience 下的 MailChimp 插件设置中,添加您刚刚为您的领域创建的钩子:

...并且完成。请注意,如果您愿意,实际上可以在 每个 WooCommerce 结帐字段周围添加操作挂钩,只需添加以下内容(未经测试):

///
//  Add `before` & `after` actions around every WooCommerce checkout field
///

function vnm_wc_form_field_actions($field, $key, $args, $value) 
    ob_start();

    do_action('vnm_before_' . $args['type'] . '_field');

    echo $field;

    do_action('vnm_after_' . $args['type'] . '_field');

    return ob_get_clean();


add_filter('woocommerce_form_field', 'vnm_wc_form_field_actions', 10, 4);

【讨论】:

以上是关于WooCommerce 的 MailChimp:在结帐字段中间添加复选框的主要内容,如果未能解决你的问题,请参考以下文章

php 基本的WooCommerce MailChimp设置

当他们使用 WooCommerce 进行购买时,如何将客户帐单信息添加到 MailChimp 组

如何使用 CURL_SETOPT 通过另一个 IP 地址路由 CURL?

Mailchimp 如何在 javascript 中调用 mailchimp 3.0 API

Mailchimp api 3.0错误:“Schema描述对象,找到数组”是代码还是在mailchimp的结尾?

Mailchimp api 3.0 错误:“架构描述了对象,而是找到了数组”是代码还是在 mailchimp 的末尾?