这俩天在折腾验证码的问题,网上各种代码都试过,SSS贴上来的是最可行的,不过有许多插件也可以实现,比如 Math Captcha,SI CAPTCHA Anti-Spam,Boomcaptcha CAPTCHA,SSS常用的是SI CAPTCHA Anti-Spam 插件(见图一),而且完美兼容 Akismet跟BuddyPress,可以为已登录用户隐藏输入验证码···

图一:

SI CAPTCHA Anti-Spam

首先介绍最直接最有效的方法一···

添加数学运算验证码方法

方法一:

//加法验证码
add_action('comment_form', 'spam_protection_math', 1, 1);
function spam_protection_math(){
//获取两个随机数, 范围0~9
$num1=rand(0,9);
$num2=rand(0,9);
//最终网页中的具体内容
echo "

$num1 + $num2 = ?" ."" ."" ."

"; } function spam_protection_pre($commentdata){ $sum=$_POST['sum'];//用户提交的计算结果 switch($sum){ //得到正确的计算结果则直接跳出 case $_POST['num1']+$_POST['num2']:break; //未填写结果时的错误讯息 case null:wp_die('错误: 没有输入验证码,请输入验证码.');break; //计算错误时的错误讯息 default:wp_die('错误: 验证码错误,请输入正确的验证码.'); } return $commentdata; } if($comment_data['comment_type']==''){ add_filter('pre_comment_on_post','spam_protection_pre'); }

此方法一省去了在模板文件中添加调用代码,大家可修改主题的CSS,以搭配主题样式···

方法二:

//添加验证码
function spam_protection_math(){
$num1=rand(0,9);
$num2=rand(0,9);
echo " $num1 + $num2 = ?"
.""
.""
."";}
function spam_protection_pre($commentdata){
$sum=$_POST['sum'];
switch($sum){
case $_POST['num1']+$_POST['num2']:break;
case null:wp_die('对不起: 请输入验证码.');break;
default:wp_die('对不起: 验证码错误,请重试.');
}
return $commentdata;
}
if($comment_data['comment_type']==''){
add_filter('preprocess_comment','spam_protection_pre');
}

方法二代码需要在你网站的位置规划的地方添加调用代码:

< ?php spam_protection_math();?>

如何屏蔽纯英文评论和纯日文:

//屏蔽纯英文评论和纯日文
function inlojv_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
// 禁止全英文评论
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "您的评论中必须包含汉字!" );
}
$pattern = '/[あ-んア-ン]/u';
// 禁止日文评论
if(preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "评论禁止包含日文!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'inlojv_comment_post');

注:
添加保存即可!$pattern的值是正则表达式,前者是汉字编码范围,后者是日文编码范围,也就是说评论必须包含中文,否则···