MailChimp for WooCommerce:在结帐字段中间添加复选框
MailChimp for WooCommerce: Add the checkbox in the middle of the checkout fields
MailChimp for WooCommerce 插件很棒,但我刚刚得到一个设计,其中 WooCommerce 结帐中的 'Subscribe to our newsletter' 复选框紧跟在电子邮件字段而不是特定部分的底部:
该插件允许您在希望复选框出现的位置输入操作挂钩;例如 woocommerce_checkout_before_customer_details
、woocommerce_after_checkout_billing_form
等,它允许您将复选框放在某个 部分 之前或之后(只要有一个钩子),但不在各个领域之中。
有没有办法将 MailChimp 复选框添加到特定字段之前或之后的特定点?
结帐字段在循环中输出,循环使用 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 过滤器总是必须 return 发送给它的第一个参数的版本(在本例中 $field
),我们所做的就是打开输出缓冲区,添加我们自己的操作对于字段前后 (vnm_before_email_field
, vnm_after_email_field
),然后 return 输出缓冲区。
然后,在 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);
MailChimp for WooCommerce 插件很棒,但我刚刚得到一个设计,其中 WooCommerce 结帐中的 'Subscribe to our newsletter' 复选框紧跟在电子邮件字段而不是特定部分的底部:
该插件允许您在希望复选框出现的位置输入操作挂钩;例如 woocommerce_checkout_before_customer_details
、woocommerce_after_checkout_billing_form
等,它允许您将复选框放在某个 部分 之前或之后(只要有一个钩子),但不在各个领域之中。
有没有办法将 MailChimp 复选框添加到特定字段之前或之后的特定点?
结帐字段在循环中输出,循环使用 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 过滤器总是必须 return 发送给它的第一个参数的版本(在本例中 $field
),我们所做的就是打开输出缓冲区,添加我们自己的操作对于字段前后 (vnm_before_email_field
, vnm_after_email_field
),然后 return 输出缓冲区。
然后,在 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);