找不到为 wordpress 登录表单上的复选框添加验证的位置。我设置了一个名为“条款”的附加复选框,我需要用户在每次要登录时检查它。
问题是,如果他们不检查,我将无法停止 wordpress 登录。登录代码在哪里。
还安装了一个可能会使事情复杂化的插件,称为他们-我的登录。
我面前有所有的代码,只要告诉我我在找什么。
我知道这已经相当老了,但我只是偶然发现了它,并且能够查看法典并找到解决方案。希望这可以帮助某人。感谢@Jason 指出正确的方向。
需要将此代码添加到您的主题functions.php
文件中:
<?php
// As part of WP authentication process, call our function
add_filter('wp_authenticate_user', 'wp_authenticate_user_acc', 99999, 2);
function wp_authenticate_user_acc($user, $password) {
// See if the checkbox #login_accept was checked
if ( isset( $_REQUEST['login_accept'] ) && $_REQUEST['login_accept'] == 'on' ) {
// Checkbox on, allow login
return $user;
} else {
// Did NOT check the box, do not allow login
$error = new WP_Error();
$error->add('did_not_accept', 'You must accept the terms and conditions' );
return $error;
}
}
// As part of WP login form construction, call our function
add_filter ( 'login_form', 'login_form_acc' );
function login_form_acc(){
// Add an element to the login form, which must be checked
echo '<label><input type="checkbox" name="login_accept" id="login_accept" /> I agree</label>';
}
Patrick Moore 给出的答案对我不起作用,但我确实对其进行了修改以提供有效的解决方案。这可能是因为他早在 2013 年就回答了,现在代码已经改变了。我将过滤器更改为 login_form_middle,并将最后的函数修改为变量,然后通过 return 将值传递回:
<?php
// As part of WP authentication process, call our function
add_filter('wp_authenticate_user', 'wp_authenticate_user_acc', 99999, 2);
function wp_authenticate_user_acc($user, $password) {
// See if the checkbox #login_accept was checked
if ( isset( $_REQUEST['login_accept'] ) && $_REQUEST['login_accept'] == 'on' ) {
// Checkbox on, allow login
return $user;
} else {
// Did NOT check the box, do not allow login
$error = new WP_Error();
$error->add('did_not_accept', 'You must accept the terms and conditions' );
return $error;
}
}
// As part of WP login form construction, call our function
add_filter ( 'login_form_middle', 'login_form_acc' );
function login_form_acc(){
// Add an element to the login form, which must be checked
$termsLink = '<label><input type="checkbox" name="login_accept" id="login_accept" /> I agree</label>';
return $termsLink;
}