WooCommerce注册表单自定义隐私复选框验证错误提示不显示问题
WooCommerce注册表单隐私复选框错误提示不显示的解决思路
问题背景
在WooCommerce中通过自定义PHP代码添加了注册表单的隐私政策复选框,验证逻辑生效(未勾选无法完成注册),但未勾选时错误提示文本无法在页面显示。
解决步骤
1. 补全验证函数的钩子参数
woocommerce_registration_errors钩子本身包含3个参数,原验证函数仅接收$errors,补全参数可确保函数在正确上下文执行,同时给错误提示添加WooCommerce标准格式标签,适配主题样式:
add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 10, 3 ); function privacy_checkbox_registration_validation( $errors, $username, $email ) { if( is_checkout() ) { return $errors; } if ( empty( $_POST[ 'privacy_policy' ] ) ) { $errors->add( 'privacy_policy_reg_error', '<strong>Ошибка</strong>: Вам нужно принять политику конфиденциальности.', 'error' ); } return $errors; }
2. 手动在表单区域输出错误提示
部分主题会修改WooCommerce默认的错误输出位置,可在注册表单钩子中添加错误打印代码,确保错误在表单区域显示:
add_action( 'woocommerce_register_form', 'add_privacy_checkbox_registration' ); function add_privacy_checkbox_registration() { // 优先输出错误提示 if ( wc_get_notices( 'error' ) ) { wc_print_notices(); } $checkbox_text = sprintf( '%s <a href="%s"><strong>%s</strong></a>', __( 'Я прочитал и согласен с' ), esc_url( site_url('/politic-conf/') ), __( 'политикой конфиденциальности' ) ); ?> <div class="woocommerce-privacy-policy-wrapper"> <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="privacy_policy" <?php checked( false, true ); ?> id="privacy-policy" /> <span class="woocommerce-privacy-policy-checkbox-text"><?php echo $checkbox_text; ?></span> <abbr class="required" title="<?php esc_attr_e( 'required', 'woocommerce' ); ?>">*</abbr> </label> <input type="hidden" name="policy-field" value="1" /> </p> </div> <?php }
wc_print_notices()会自动输出WooCommerce所有错误提示,确保内容能在表单区域展示。
3. 检查主题CSS样式
若以上操作后仍无显示,检查主题CSS是否对.woocommerce-error类元素设置了display: none或visibility: hidden规则,调整样式确保错误提示可见。
内容的提问来源于stack exchange,提问作者genreeds48
相关产品推荐
相关产品推荐

