@Update:实现方法有更新,请参见该插件:Mail Magic
用了Wordpress快一年了,一直对它的评论功能的选项很不满意(也可以说,是很不习惯)。在后台的评论设置中,你要么就设置姓名和邮箱都必填,要么就设置成姓名和邮箱都选填。其实我一直想要让它必填姓名选填邮箱。因为我必须知道发评论者的昵称,这样才能区分他们,不然一个个评论下来都是匿名作者。虽然我也想知道其邮箱,但是不是每个人都有耐心把自己长长的邮箱地址打上去。如果邮箱必填,一定要吓跑一些本来想发评论但比较懒的人(比如我自己,哈哈)。不过既然Wordpress不提供这样的选项,只好自己动手实现了。其实很简单。Wordpress里发表评论的模块是其根目录下的wp-comments-post.php这个文件。其原理分析如下(以 wordpress 2.2 为例)。
当提交评论的按钮被按下的时候,wp-comments-post.php先检查后台的基本选项“评论者必须输入姓名及电子邮件”,如果选项值为真,则对评论作者和评论作者的邮箱进行判断。我们来看看其相应代码:
- if ( get_option('require_name_email') && !$user->ID ) {
- if ( 6 > strlen($comment_author_email) || '' == $comment_author )
- wp_die( __('Error: please fill the required fields (name, email).') );
- elseif ( !is_email($comment_author_email))
- wp_die( __('Error: please enter a valid email address.') );
- }
可以看出,Wordpress 首先检查后台选项是否要求填写姓名和邮箱。若要求,则先检查评论作者邮箱的长度和评论作者姓名的长度,前者要求长度至少为6,后者不能为空。若邮箱长度小于6或作者姓名为空,则提示“Error: please fill the required fields (name, email).”。如果这一步通过了,则再检查邮箱地址的格式,若格式不正确,提示“Error: please enter a valid email address.”,至此,评论提交才成功。
为了实现我的想法,我们可以要求Wordpress这么做:只检查姓名长度,若空则提示出错,但如果评论者好心地留下了邮箱地址,则看看它的格式对不对,以免评论者不小心打错了。以下是我的修改方法:
- if ( get_option('require_name_email') && !$user->ID ) {
- if ( '' == $comment_author )
- wp_die( __('请填写昵称后再发表评论 :-)') );
- if ( "" != $comment_author_email) {
- if ( !is_email($comment_author_email))
- wp_die( __('邮箱格式不正确,不小心填错了? 请返回更正它吧 :-)') );
- }
- }
Popularity: 28% [?]
相关日志:
18 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.
谢谢了哈,我试试你改的这个.我看到群里的消息就跑过来了。。。还看到你们讨论4U主页的问题,你放的那个主页不是原作者的主页,只是翻译者的主页,你到我博客上看。我放的是原作者的主页
看到了,原来hemingway是类似K2的东东,呵呵
尝试你文中的方法~~没有效果~求指导!
引用自 davey :
具体什么现象?请描述一下
请确认你的后台的“选项”——“评论”中,打开了“评论作者必须输入姓名和 Email”。
最好还是直接用我的文件覆盖你原来的文件吧
具体现象就是和没改前一样;
已经确认打开了;
就是直接覆盖的。
引用自 davey :
hmm,你的wordpress 是2.2的吗?注意这个文件要直接覆盖 wordpress 2.2 根目录 下的同名文件的。
不介意的话,请把你的blog让我看看
用的是点点游汉化的wp2.2版本~确定覆盖的是wordpress 2.2 根目录 下~
http://davey.cn/blog
引用自 davey :
呵呵,你用的主题是Unnamed One,这个主题用了ajax评论系统,提交表单之前,主题本身的评论模块好像就对表单内容进行验证了。要解决这个问题,必须修改主题本身的评论模块。
你可以换个主题,验证一下我的猜测
不会改主题-_-!!!算了~不烦这个神了~
Parse error: syntax error, unexpected $end in /usr/local/psa/home/vhosts/linboke.cn/httpdocs/wp-comments-post.php on line 79
引用自 嘉林 :
改得不仔细,改错了吧,PHP报语法错误
学习了,我下下来用用看那!

改了之后非常管用,因为我现实中有些朋友确实没有邮箱,呵呵~~
不错的主题
@来来:
underone 同学的杰作。
http://underone.com
兄弟,你太厉害了,技术高手啊
Continuing the Discussion