转载自:http://www.slyar.com/blog/wordpress-only-name.html

WordPress的评论默认有2种方式,一种是姓名和邮箱全写,另一种是姓名和邮箱全不写。全写吧,很多访客都没有邮箱或者不喜欢写邮箱,这样就导致评论减少;全不写吧,又会有很多垃圾评论。。。这时有人提出:能不能让访客必写姓名又可以不写邮箱呢?

答案是肯定的。首先我们来分析一下评论提交时的php文件,位于Wordpress根目录下的wp-comments-post.php,看这一段:

if ( get<em>option('require</em>name<em>email') && !$user->ID ) {
   	if ( 6 > strlen($comment</em>author<em>email) || '' == $comment</em>author )
   		wp<em>die( ('Error: please fill the required fields (name, email).') );
   	elseif ( !is<em>email($comment</em>author<em>email))
   		wp</em>die( _</em>('Error: please enter a valid email address.') );
}
   

我们看到这是一段嵌套if判断,Wordpress首先判断后台的评论选项是否要求填写姓名和邮箱,如果要求,则先检查评论者的姓名和邮箱的长度(姓名不能为空,邮箱长度不能小于6);如果姓名为空或者邮箱长度小于6,则提示Error: please fill the required fields (name, email),若此项检查符合要求,那么继续检查邮箱是否符合格式,若格式不正确则提示Error: please enter a valid email address,若邮箱格式也符合要求,评论才会成功发出。

一开始为了简单,就把第二个if判断删除了,试验后发现不可行。。。换思路。。。

因为它是嵌套if,所以必须二个条件都符合才行,那么我们可以将其中一个嵌套提出来单独判断。最后的判断方式是:首先判断姓名是否为空,若为空则弹出错误提示,不为空继续检查邮箱地址,如果邮箱地址为空则继续,不为空则判断邮箱地址格式是否正确,格式不正确弹出错误提示,格式正确则完成评论。

那么实现的代码为(我小小汉化了一下):

if ( get<em>option('require</em>name<em>email') && !$user->ID ) {
   if ( '' == $comment</em>author )
   		wp<em>die(<strong>('Slyar说:名字你都不写?想当火星人?'));
   if ( "" != $comment</strong></em>author<em>email) {
	   if ( !is</em>email($comment<em>author</em>email))
	   		wp_die(('Slyar说:拜托,要写邮箱写对成不?') );
   }
}

在实际测试的时候发现还是会出现Alert错误提示,而php代码里没有Alert,那么应该是模板或者插件自带的判断,经过分析查找最后得到结论是"Wordpress Thread Comment"这个插件内部含有评论判断语句,修改的方法也大同小异,我就不说了。

如果没有插件干扰,那么经过修改就可以成功实现Wordpress评论时只写姓名不写邮箱了。

PS.要使用这个功能,后台设置-评论中的"评论者必须输入姓名及电子邮箱"一定要打钩!