P粉4640884372023-09-04 11:32:09
你尝试过没有这个吗?
if( is_checkout() ) { return $errors; }
由于过滤器是一个注册过滤器,所以似乎那段代码是不必要的,因为它不会在结账时被调用。尝试注释掉那个代码块,然后再次测试注册。如果它能工作,那么也要测试一下结账流程,确保它没有出错。
return $errors;
会结束函数,错误不会被添加。当然,我会假设is_checkout()
会在注册时返回false,但也许在注册时它会因某种原因返回true?
总之,只是一个尝试。
P粉2311124372023-09-04 10:04:20
我已经在测试网站上测试了你的代码,对我来说它运行正常,当复选框未被选中时会显示错误提示...
现在在最后一个函数中有一些缺失的东西,你在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; }
现在我不确定这是否能解决你的问题,因为在你的网站上提交后页面会重新加载,所以错误消息没有时间显示。