验证 WooCommerce 结帐页面中的附加复选框字段
Posted
技术标签:
【中文标题】验证 WooCommerce 结帐页面中的附加复选框字段【英文标题】:Validation for an additional checkbox field in WooCommerce checkout page 【发布时间】:2020-11-23 15:30:20 【问题描述】:我在结帐页面的条款和条件字段下方添加了一个接受字段。新字段是关于年龄验证的。
在前端,我可以看到我的复选框,但如果未选中此复选框,客户应该无法订购。 这是生成的html代码:
<?php if ( wc_terms_and_conditions_checkbox_enabled() ) : ?>
<p class="form-row validate-required">
<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
<input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="terms" <?php checked( apply_filters( 'woocommerce_terms_is_checked_default', isset( $_POST['terms'] ) ), true ); // WPCS: input var ok, csrf ok. ?> id="terms" />
<span class="woocommerce-terms-and-conditions-checkbox-text"><?php wc_terms_and_conditions_checkbox_text(); ?></span> <span class="required">*</span>
</label>
<input type="hidden" name="terms-field" value="1" />
</p>
<?php endif; ?>
<p class="form-row validate-required">
<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
<input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" required name="validationage" id="validationage" />
<span class="woocommerce-terms-and-conditions-checkbox-text"><?php _e( 'Je certifie avoir + de 18 ans', 'woocommerce'); ?></span> <span class="required">*</span>
</label>
</p>
如何启用此复选框的验证?
【问题讨论】:
【参考方案1】:以下内容将处理您在结帐页面上的自定义复选框字段验证:
add_action('woocommerce_checkout_process', 'custom_checkbox_checkout_validation');
function custom_checkbox_checkout_validation()
$field_id = 'validationage';
if( ! isset( $_POST[$field_id] ) || empty( $_POST[$field_id] ) )
wc_add_notice( __("validation text.","woocommerce"), "error" );
代码在您的活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。
【讨论】:
很棒的代码,但是如何仅在用户未登录时触发它。我为未登录的用户设置了自定义复选框。如果用户已登录复选框消失,但验证仍然报告错误。 @pat 只需将 if 语句代码行替换为以下if( ! is_user_logged_in() && ( ! isset( $_POST[$field_id] ) || empty( $_POST[$field_id] ) ) )
【参考方案2】:
如果你使用 woocommerce_after_checkout_validation 钩子会更好,这会让你与其他 WooCommerce 验证错误同步
add_action( 'woocommerce_after_checkout_validation', function( $data, &$errors )
$field_id = 'validationage';
if( ! isset( $data[$field_id] ) || empty( $data[$field_id] ) )
$errors->add( 'terms', __( 'validation text.', 'theme-slug' ) );
,10, 2 );
注意:您可能需要使用 woocommerce_checkout_fields 过滤器挂钩来添加自定义结帐字段。
谢谢
【讨论】:
以上是关于验证 WooCommerce 结帐页面中的附加复选框字段的主要内容,如果未能解决你的问题,请参考以下文章
在 Woocommerce 结帐页面中显示一个添加费用的复选框
添加一个结帐复选框字段,在 Woocommerce 中启用百分比费用