Woocommerce注册中的自定义复选框验证错误提示问题的重写标题为:解决Woocommerce注册时自定义复选框验证错误提示的问题
P粉318928159
P粉318928159 2023-09-03 12:06:38
[PHP讨论组]
<p>在WooCommerce中,我使用以下代码向客户注册表单中添加自定义“隐私”复选框:</p> <pre class="brush:php;toolbar:false;">// 向注册表单添加复选框 add_action( 'woocommerce_register_form', 'add_privacy_checkbox_registration' ); function add_privacy_checkbox_registration() { $checkbox_text = sprintf( '%s &lt;a href=&quot;%s&quot;&gt;&lt;strong&gt;%s&lt;/strong&gt;&lt;/a&gt;', __( 'Я прочитал и согласен с' ), esc_url( site_url('/politic-conf/') ), __( 'политикой конфиденциальности' ) ); ?&gt; &lt;div class=&quot;woocommerce-privacy-policy-wrapper&quot;&gt; &lt;p class=&quot;form-row validate-required&quot;&gt; &lt;label class=&quot;woocommerce-form__label woocommerce-form__label-for-checkbox checkbox&quot;&gt; &lt;input type=&quot;checkbox&quot; class=&quot;woocommerce-form__input woocommerce-form__input-checkbox input-checkbox&quot; name=&quot;privacy_policy&quot; &lt;?php checked( false, true ); ?&gt; id=&quot;privacy-policy&quot; /&gt; &lt;span class=&quot;woocommerce-privacy-policy-checkbox-text&quot;&gt;&lt;?php echo $checkbox_text; ?&gt;&lt;/span&gt; &lt;abbr class=&quot;required&quot; title=&quot;&lt;?php esc_attr_e( 'required', 'woocommerce' ); ?&gt;&quot;&gt;*&lt;/abbr&gt; &lt;/label&gt; &lt;input type=&quot;hidden&quot; name=&quot;policy-field&quot; value=&quot;1&quot; /&gt; &lt;/p&gt; &lt;/div&gt; &lt;?php } // 验证 add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 10, 3 ); function privacy_checkbox_registration_validation( $errors ) { if( is_checkout() ) { return $errors; } if ( empty( $_POST[ 'privacy_policy' ] ) ) { $errors-&gt;add( 'privacy_policy_reg_error', 'Вам нужно принять политику конфиденциальности.' ); } return $errors; } </pre> <p>代码是有效的。复选框已添加。复选框逻辑也有效。 也就是说,如果您不勾选复选框,将无法进行用户注册。</p> <p>但是存在一个问题。如果未点击复选框,则错误文本不会显示在屏幕上...</p> <p>这是我的网站上有问题的页面 - 问题页面</p> <p>有什么想法吗?</p>
P粉318928159
P粉318928159

全部回复(2)
P粉464088437

你尝试过没有这个吗?

if( is_checkout() ) {
    return $errors;
}

由于过滤器是一个注册过滤器,所以似乎那段代码是不必要的,因为它不会在结账时被调用。尝试注释掉那个代码块,然后再次测试注册。如果它能工作,那么也要测试一下结账流程,确保它没有出错。

return $errors;会结束函数,错误不会被添加。当然,我会假设is_checkout()会在注册时返回false,但也许在注册时它会因某种原因返回true?

总之,只是一个尝试。

P粉231112437

我已经在测试网站上测试了你的代码,对我来说它运行正常,当复选框未被选中时会显示错误提示...

现在在最后一个函数中有一些缺失的东西,你在add_filter()部分声明了3个参数,所以还缺少2个。同时我还简化了你的代码

这里只是最后一个函数的修改后代码:

// 验证
add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 999, 3 );
function privacy_checkbox_registration_validation( $errors, $username, $email ) {
    // 不在结账页面
    if( ! is_checkout() && empty( $_POST[ 'privacy_policy' ] ) ) {
        $errors->add( 'privacy_policy_error', 'Вам нужно принять политику конфиденциальности.' );
    }
    return $errors;
}

现在我不确定这是否能解决你的问题,因为在你的网站上提交后页面会重新加载,所以错误消息没有时间显示。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号