前段时间一直由于恶意注册被搞的很烦,就把注册关了一段时间,不过这显然不是我想要的解决办法,主要原因还是希望这里能够集大家的才华才能慢慢成长起来,靠我一样的低能表现想走很远肯定是不现实的。

先说下给wp弄下注册验证问题,很是简单,吧这段代码粘贴到functions.php文件中,如果想加随机问题,需要改下rand(0,1); 两个问题就是0,1 三个问题就是0,2了,问题和答案按格式添加好了,好了、设置的问题解决了,

/**
 * WordPress 注册表单添加验证问题(支持多个随机问题)
 * https://www.xhsay.com
 */
function rand_reg_question(){
 $register_number=rand(0,1); // 设置随机数的返回范围
 $_SESSION['register_number']=$register_number;
}
add_action('login_head','rand_reg_question');
 
global $register_questions;
global $register_answers;
// 添加问题数组
$register_questions=array('1+5-2+3-6-1=?','are you a spam?(yes or no)');
// 添加答案数组(与上面的问题对应)
$register_answers=array('0','no');
 
add_action( 'register_form', 'add_security_question' );
function add_security_question() {
 global $register_questions;
 $register_number=$_SESSION['register_number'];
 ?>
 <p>
 <label><?php echo $register_questions[$register_number];?><br />
 <input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" />
 </label>
 </p>
<?php }
 
add_action( 'register_post', 'add_security_question_validate', 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
 global $register_answers;
 $register_number=$_SESSION['register_number'];
 if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
 return $errors->add( 'proofempty', '<strong>Error</strong>: You need to answer the question' );
 } elseif ( strtolower( $_POST[ 'user_proof' ] ) != $register_answers[$register_number] ) {
 return $errors->add( 'prooffail', '<strong>Error</strong>: Wrong answer,try again please' );
 }
}

其实我想说的是后半部分,不知道有没有发现我设置的问题和答题和回答提示都是英文的,也可以设置中文的,不过你保存uf8 no bom的话,中文就是乱码,当你保存uf8 包含Bom的话,中文问题倒是正常显示了,但是你的媒体库就没法正常展示了,修改侧栏和底部的bar的时候也没法预览保存了,所以这里作者用的是英文保存为uf8 no BOM就避免了。 希望有所帮助…

发表评论