Skip to content


让Wordpress评论时必填姓名选填邮箱

@Update:实现方法有更新,请参见该插件:Mail Magic

  用了Wordpress快一年了,一直对它的评论功能的选项很不满意(也可以说,是很不习惯)。在后台的评论设置中,你要么就设置姓名和邮箱都必填,要么就设置成姓名和邮箱都选填。其实我一直想要让它必填姓名选填邮箱。因为我必须知道发评论者的昵称,这样才能区分他们,不然一个个评论下来都是匿名作者。虽然我也想知道其邮箱,但是不是每个人都有耐心把自己长长的邮箱地址打上去。如果邮箱必填,一定要吓跑一些本来想发评论但比较懒的人(比如我自己,哈哈)。不过既然Wordpress不提供这样的选项,只好自己动手实现了。其实很简单。Wordpress里发表评论的模块是其根目录下的wp-comments-post.php这个文件。其原理分析如下(以 wordpress 2.2 为例)。
  当提交评论的按钮被按下的时候,wp-comments-post.php先检查后台的基本选项“评论者必须输入姓名及电子邮件”,如果选项值为真,则对评论作者和评论作者的邮箱进行判断。我们来看看其相应代码:

  1. if ( get_option('require_name_email') && !$user->ID ) {
  2.     if ( 6 > strlen($comment_author_email) || '' == $comment_author )
  3.         wp_die( __('Error: please fill the required fields (name, email).') );
  4.     elseif ( !is_email($comment_author_email))
  5.         wp_die( __('Error: please enter a valid email address.') );
  6. }

  可以看出,Wordpress 首先检查后台选项是否要求填写姓名和邮箱。若要求,则先检查评论作者邮箱的长度和评论作者姓名的长度,前者要求长度至少为6,后者不能为空。若邮箱长度小于6或作者姓名为空,则提示“Error: please fill the required fields (name, email).”。如果这一步通过了,则再检查邮箱地址的格式,若格式不正确,提示“Error: please enter a valid email address.”,至此,评论提交才成功。
  为了实现我的想法,我们可以要求Wordpress这么做:只检查姓名长度,若空则提示出错,但如果评论者好心地留下了邮箱地址,则看看它的格式对不对,以免评论者不小心打错了。以下是我的修改方法:

  1. if ( get_option('require_name_email') && !$user->ID ) {
  2.     if ( '' == $comment_author )
  3.         wp_die( __('请填写昵称后再发表评论 :-)') );
  4.     if ( "" != $comment_author_email) {
  5.         if ( !is_email($comment_author_email))
  6.         wp_die( __('邮箱格式不正确,不小心填错了? 请返回更正它吧 :-)') );
  7.     }
  8. }

Popularity: 28% [?]

相关日志:

Posted in 生活点滴. Tagged with , , .

18 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Spider said

    谢谢了哈,我试试你改的这个.我看到群里的消息就跑过来了。。。还看到你们讨论4U主页的问题,你放的那个主页不是原作者的主页,只是翻译者的主页,你到我博客上看。我放的是原作者的主页

  2. Leo said

    看到了,原来hemingway是类似K2的东东,呵呵

  3. davey said

    尝试你文中的方法~~没有效果~求指导!

  4. Leo said

    引用自 davey :

    尝试你文中的方法~~没有效果~求指导!

    具体什么现象?请描述一下

    请确认你的后台的“选项”——“评论”中,打开了“评论作者必须输入姓名和 Email”。

    最好还是直接用我的文件覆盖你原来的文件吧

  5. davey said

    具体现象就是和没改前一样;
    已经确认打开了;
    就是直接覆盖的。

  6. Leo said

    引用自 davey :

    具体现象就是和没改前一样;

    已经确认打开了;

    就是直接覆盖的。

    hmm,你的wordpress 是2.2的吗?注意这个文件要直接覆盖 wordpress 2.2 根目录 下的同名文件的。
    不介意的话,请把你的blog让我看看

  7. davey said

    用的是点点游汉化的wp2.2版本~确定覆盖的是wordpress 2.2 根目录 下~
    http://davey.cn/blog

  8. Leo said

    引用自 davey :

    用的是点点游汉化的wp2.2版本~确定覆盖的是wordpress 2.2 根目录 下~
    http://davey.cn/blog

    呵呵,你用的主题是Unnamed One,这个主题用了ajax评论系统,提交表单之前,主题本身的评论模块好像就对表单内容进行验证了。要解决这个问题,必须修改主题本身的评论模块。 :em20:
    你可以换个主题,验证一下我的猜测

  9. davey said

    不会改主题-_-!!!算了~不烦这个神了~

  10. 嘉林 said

    Parse error: syntax error, unexpected $end in /usr/local/psa/home/vhosts/linboke.cn/httpdocs/wp-comments-post.php on line 79

  11. Leo said

    引用自 嘉林 :

    Parse error: syntax error, unexpected $end in /usr/local/psa/home/vhosts/linboke.cn/httpdocs/wp-comments-post.php on line 79

    改得不仔细,改错了吧,PHP报语法错误

  12. guzi said

    学习了,我下下来用用看那! :em02: :em02:

  13. 影子 said

    :em20: 谢谢你的代码
    改了之后非常管用,因为我现实中有些朋友确实没有邮箱,呵呵~~

  14. 来来 said

    不错的主题

  15. Leo said

    @来来:

    underone 同学的杰作。

    http://underone.com

  16. laoniu said

    兄弟,你太厉害了,技术高手啊

Continuing the Discussion

  1. 双叶@Donews linked to this post on 2007-09-12

    [...] Leo’s Space » 博客文章 » 让Wordpress评论时必填姓名选填邮箱 (tags: Wordpress) RSS方式的评论。 双叶@Donews is © Author(s). Benevolence theme by Theron Parlin. Syndicate entries using RSS and Comments (RSS). This theme contains valid XHTML and CSS. 0 [...]

  2. 找回失落的 ID | 上善若水 Feed博客聚合 linked to this post on 2009-02-08

    [...] 让Wordpress评论时必填姓名选填邮箱 [...]

Some HTML is OK

(never shared)

or, reply to this post via trackback.


SEO Powered by Platinum SEO from Techblissonline