隐藏 Wordpress 访客的资料框

据说 Wordpress 隐藏"回头客"的资料框可以有更好的用户体验,对此我表示怀疑。不过这个问题用 jQuery 来解决的话十分简单,所以我也给自己的 Blog 加上了。已经引入了那么大个 jQuery 框架,当然要物尽其用。。。

先说思路。用 js 的思路来判断是一件简单的事情。

新访客和"回头客"的区别在于有无 cookies,被我 blog 投放过 cookies 的同学下次再来就不用填写资料了,大家都知道。。。那么判断一个用户是否是新访客也很简单,用 js 检查姓名一栏是否有内容。有,那就是回头客,没有就是新访客。

先看 comments.php 里有关姓名的代码:

<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" class="text" />

其中 value 值是关键。"回头客"的 value 值便是 cookies 对应的姓名,新访客的话 value 为空。

开始判断:if($('input#author[value]').length>0)。即如果 id 为 author 的 input 标签内 value 值长度大于0。

大于0怎么了?大于零就是有资料,就是回头客了。在这里,完全不要去管新访客,因为我们的目的就是对回头客做所谓的"用户体验优化"。

接着,隐藏所有的 input 框,$("form#commentform input").css('display','none')

到这里就该完了,但是不行。因为回头客还需要一个按钮,方便他们在需要编辑信息的时候让资料框出现。

所以需要写个文字按钮。你还可以把按钮样式做得更好看一点,我这里求简便,就随便糊弄一下。

var editInfo='<span class="editinfo" style="cursor:pointer">edit info?</span>'

把按钮放在想放的地方,我放在 welcome back xxx 后面。$('div#respond').append(editInfo)

点一下,资料框滑出,再点一下,资料框收起:$('.editinfo').click(function(){$('form#commentform input').slideToggle('slow')})

好了,这件事情完了,在我眼里,它们只是一行。。。

if($('input#author[value]').length>0){$("form#commentform input").css('display','none');var editInfo='<span style="cursor:help" class="editinfo">edit info?</span>';$('div#respond').append(editInfo);$('.editinfo').click( function(){$('form#commentform input').slideToggle('slow')})}

我承认这讲的不是一般的含糊,但是考虑到不懂 js 的朋友我说得再详细他还是不懂,索性就给稍微懂一点的朋友看吧。效果可以参考本 blog 的留言部分。

如果您有兴趣把它阐述成通俗易懂的文章,我将非常感谢。反正我不太擅长。

Tag(s): ,
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
Shawn Published@16:42 / 2008-11-03 / Trackback / Skip
49 Comments Contributed by Visitors
  1. rebuttonxiaorsz / 16:56@2008-11-03 1
    xiaorsz

    呵呵,已经很详细了,你这是完全没有动commnets.php,通过JS直接添加内容!! :lol:

  2. rebuttonShawn / 16:57@2008-11-03 2
    Shawn

    @xiaorsz: 是啊,要尽量秉承无侵入的原则。

  3. rebutton火星基地 / 17:02@2008-11-03 3
    火星基地

    啊...沙发!
    回头客这东西很符合国情, 支持~

  4. rebutton火星基地 / 17:02@2008-11-03 4
    火星基地

    汗, 还我沙发~ 迟点就没了 :evil:

  5. rebuttonxiaorsz / 17:06@2008-11-03 5
    xiaorsz

    楼上的激动了,哈哈!!

  6. rebuttonShawn / 17:10@2008-11-03 6
    Shawn

    @火星基地: 我这里很奇怪,要么很久没人理,要么就是抢沙发。。。。

  7. rebuttonJor / 17:13@2008-11-03 7
    Jor

    JS和jQuery的话,哪个好点?是不是jQuery对系统资源的占用小点? :grin:

  8. rebuttonShawn / 17:16@2008-11-03 8
    Shawn

    @Jor: jQuery 就是一个 js 框架。。。还是js.

  9. rebuttonJor / 17:22@2008-11-03 9
    Jor

    @Shawn: 这个框架的好点? :?:

  10. rebuttonShawn / 17:30@2008-11-03 10
    Shawn

    @Jor: 其实 mootools 好点。。。。我只是比较习惯了,有机会全面转向 mootools

  11. rebutton火星基地 / 17:31@2008-11-03 11
    火星基地

    @xiaorsz: 我在仔细看代码的时候,你就抢滩登陆了 唉! 贻误战机~

  12. rebutton火星基地 / 17:31@2008-11-03 12
    火星基地

    @Shawn: 怪阿, 看看时间段~ :-D

  13. rebuttonJor / 17:32@2008-11-03 13
    Jor

    @Shawn: 支持,到时候见识下。 :grin:

  14. rebutton老所 / 18:09@2008-11-03 14
    老所

    Google Reader更新的太不及时了,我还以为有沙发哦,连地板都没得坐。

  15. rebuttonShawn / 18:10@2008-11-03 15
    Shawn

    @老所: 这事儿总算让你给碰上了,我还以为你的 Reader 总是比我的快呢。

  16. rebutton老所 / 18:12@2008-11-03 16
    老所

    唉,暂时不改了,老改模板太累了:)不过还是要支持shawn继续研究:)

  17. rebuttonShawn / 18:13@2008-11-03 17
    Shawn

    @老所: 你那模板也改不了,至少不好改,编辑器太奇怪了。

  18. rebuttonMao / 18:14@2008-11-03 18
    Mao

    你这个回复很好.可以看到要回复的人说的什么...怎么弄的?

  19. rebuttonShawn / 18:16@2008-11-03 19
    Shawn

    @Mao: 还是用的 jQuery...

  20. rebuttonShawn / 18:17@2008-11-03 20
    Shawn

    @Mao: 你和 nobug 的头像一样。。。。

  21. rebuttonMao / 18:19@2008-11-03 21
    Mao

    @Shawn: nobug也来我博客和我留言说了....我们真巧

  22. rebuttonMao / 18:20@2008-11-03 22
    Mao

    强烈要求公布主题....嗯嗯..至少也公布你主题所用到的技巧...估计你没怎么用插件.都是修改主题的

  23. rebuttonShawn / 18:20@2008-11-03 23
    Shawn

    @Mao: 我记得你的头像以前是一只白猫。喜欢黑猫的话,http://leehow.com 那里有很多选择,哈哈。

  24. rebuttonShawn / 18:22@2008-11-03 24
    Shawn

    @Mao: 我公布这个主题还不如重新做一个,改的地方太多了,有些改动记都记不起来。现在用的插件是比较少,因为大都被我用 js 来实现了。。。

  25. rebuttonMao / 18:26@2008-11-03 25
    Mao

    @Shawn: 你这个主题应用的技巧太有用了...而且也很好看啊...这里又是一个学习的好地方了

  26. rebuttonShawn / 18:27@2008-11-03 26
    Shawn

    @Mao: 好吧,以后我想起哪个说哪个。。。

  27. rebutton老所 / 18:27@2008-11-03 27
    老所

    随便看看代码哈,讨论下。你用css的display: none来隐藏form,但是这个评论的form应该包括5个内容:作者、电邮、网址、内容输入、发送按钮。你如果display none了,那内容输入和发送按钮是不是也会消失呢?

  28. rebuttonShawn / 18:29@2008-11-03 28
    Shawn

    隐藏的是 form 里面的 input 不是整个 form,所以才写的 $("form#commentform input")

  29. rebutton老所 / 18:30@2008-11-03 29
    老所

  30. rebuttonShawn / 18:30@2008-11-03 30
    Shawn

    @老所: 明白否?如果是 input 的话,就只有名字、电邮、网址 三个了。

  31. rebutton老所 / 18:31@2008-11-03 31
    老所

    再问下,你这段代码应该放在什么地方触发呢?

  32. rebuttonShawn / 18:33@2008-11-03 32
    Shawn

    @老所: 随便放在哪儿,因为代码里已经绑定了相应的元素,所以你即使单独将代码保存为一个文件,在需要用到的页面上引用该文件也会触发相应的操作。

  33. rebutton老所 / 18:33@2008-11-03 33
    老所

    @Shawn: 明白是明白,但这也是个凑巧,如果我们还有个输入框,是input不是textarea,不需要隐藏怎么办?

  34. rebutton老所 / 18:36@2008-11-03 34
    老所

    @Shawn: 我的意思是要放到 body 的 on_load 还是什么地方?我对js不是很熟,我就知道最好封装成一个函数,然后由某个事件触发,如果不封装成函数,全是全局的,会不会存在html页面还没load完就开始执行这段代码了?这样就有错误了。或者,你是把js放在html的最后的?

  35. rebuttonShawn / 18:37@2008-11-03 35
    Shawn

    @老所: 那也有很多方法,比如你可以自己加一个大的 div 把你要隐藏的三个input包起来,进而隐藏那个div;又或者你可以用更详细的选择器,可以选第几个input

  36. rebuttonShawn / 18:40@2008-11-03 36
    Shawn

    @老所: jquery 里面已经没有传统 js 的 on_load 了,取而代之的是 $(document).ready, 是说在所有 dom 载入后再执行。

  37. rebuttoniColor / 19:06@2008-11-03 37
    iColor

    我倒感觉着看到三个框框里显示着自己的资料而不用手动再填比只看到留言框来的亲切,,,
    哈哈哈...

  38. rebuttoniColor / 19:09@2008-11-03 38
    iColor

    好像从人的感觉来说是,人们已经习惯了留言时要填资料,,,然后往下一拉看到都填好了,会多少有点窃喜,,如果一拉只看到留言框,可以会稍微想一下怎么没了资料框,然后才想到,哦,哦,,哦,,这么回事,我要老访客了,哈哈哈,,, :lol:

  39. rebuttonShawn / 19:13@2008-11-03 39
    Shawn

    @iColor: 我也是这么想的,所以现在才这么做。。。

  40. rebuttonaunsen / 20:58@2008-11-03 40
    aunsen

    哎,半头雾水!

  41. rebuttonShawn / 20:59@2008-11-03 41
    Shawn

    @aunsen: 还好不是一头 :grin:

  42. rebutton / 21:19@2008-11-03 42
    时

    学习了

  43. rebuttonShawn / 21:21@2008-11-03 43
    Shawn

    @时: 又换了个美女头像。

  44. rebutton / 21:35@2008-11-03 44
    时

    @Shawn: 
    看美女对眼部发育很有好处。

  45. rebuttonShawn / 21:44@2008-11-03 45
    Shawn

    @时: 太小了,大点养眼,小了就费眼了。。

  46. rebuttonleehow / 22:04@2008-11-03 46
    leehow

    我也喜欢看美女的。

  47. rebuttonShawn / 22:05@2008-11-03 47
    Shawn

    @leehow: 我知道你喜欢 The L Word

  48. rebuttonleehow / 22:28@2008-11-03 48
    leehow

    DH看了一半,UB看完了,SMANSA也看完了。

  49. rebuttonNickyYe / 22:35@2008-11-03 49
    NickyYe

    呃...其实是一样的吧,没有说有很大区别的样子

  50. rebuttonShawn / 22:39@2008-11-03 50
    Shawn

    @NickyYe: 我也不觉得,所以只是说个思路而已。。

  51. rebuttonJoBru / 22:52@2008-11-03 51
    JoBru

    这里学到的东西都蛮实际的…… :shock:

  52. rebuttonxiaorsz / 23:09@2008-11-03 52
    xiaorsz

    希望以后可以多写一点技巧方面的东西1! :grin:

  53. rebuttonfisio / 23:42@2008-11-03 53
    fisio

    welcome back fisio

  54. rebuttonShawn / 23:45@2008-11-03 54
    Shawn

    @fisio: 是说这句话有点毛病么?我加个标点。

  55. rebuttonfisio / 23:47@2008-11-03 55
    fisio

    @Shawn: 没有啊,我只是感叹一下。。。

  56. rebuttonShawn / 23:50@2008-11-03 56
    Shawn

    @fisio: 我改了,之前确实有点毛病。。。

  57. rebuttonfisio / 0:00@2008-11-04 57
    fisio

    @Shawn: 没啥问题啊,大家都这么说:i'm serious john. you're so sexy bitch...

  58. rebuttonShawn / 0:03@2008-11-04 58
    Shawn

    @fisio: .... 前半部分没啥,后半部分断句不对。。

  59. rebuttonsein / 20:09@2008-11-04 59
    sein

    看到这里,我不得不冒泡测试一下。。。

  60. rebuttonsein / 20:10@2008-11-04 60
    sein

    回复不见了 - -

  61. rebuttonsein / 20:11@2008-11-04 61
    sein

    刷新看到了,很先进。。。

  62. rebuttonShawn / 20:11@2008-11-04 62
    Shawn

    @sein: Sein from WAD? Welcome :smile:

  63. rebuttonsein / 20:13@2008-11-04 63
    sein

    回复的真快呀,我正想把这段代码往 wad 测试呢

    以及,如果静态化了的 blog 这个代码还适用吗

  64. rebuttonShawn / 20:14@2008-11-04 64
    Shawn

    @sein: 我这里是 Ajax 提交评论,应该是直接就刷上去了。

  65. rebuttonShawn / 20:15@2008-11-04 65
    Shawn

    @sein: 我这里就是静态化的,没问题,JS 和静态化没有冲突。

  66. rebuttonsein / 20:18@2008-11-04 66
    sein

    方便加我 gtalk 吗,我想请教为什么你这里 ajax 回复以后,序列号能显示为 n+1 而不是 1 :P

  67. rebuttonShawn / 20:21@2008-11-04 67
    Shawn

    @sein: 加了 :smile:

  68. rebutton任平生 / 0:48@2008-11-05 68
    任平生

    这个蛮有趣的~

  69. rebuttonShawn / 0:50@2008-11-05 69
    Shawn

    @任平生: 真能提高用户体验?

  70. rebutton任平生 / 1:09@2008-11-05 70
    任平生

    @Shawn: 没感觉。这样感觉最好了,一看我直接就可以留言了,没有什么繁琐的东西填写,心情很愉快。其实呢,不知道自己之前已经填写过一次了,呵呵~

  71. rebuttonShawn / 1:11@2008-11-05 71
    Shawn

    @任平生: 看来还是有好处,那我就不撤掉这个功能了。。。

  72. rebutton蹲在街角狂笑 / 21:25@2008-11-05 72
    蹲在街角狂笑

    绝对能...这个会让老用户觉得方便了许多,虽然不隐藏也不用他费尽填写什么...
    但是感觉不一样...

  73. rebuttonjk / 0:13@2008-11-12 73
    jk

    这个比较有趣!收了 

  74. rebuttondaniel / 0:27@2008-11-15 74
    daniel

    先走马观花研究下,再试用下

  75. rebuttonlostindream / 23:27@2008-11-26 75
    lostindream

    很强悍,学习了

  76. rebutton阿企 / 14:25@2008-12-02 76
    阿企

    除了cool,我还能说些什么呢……

  77. rebuttonCauu / 15:37@2008-12-06 77
    Cauu

    不错的东东。学习下

  78. rebuttonshamas / 14:22@2008-12-07 78
    shamas

    学习学习

  79. rebutton沿阶草 / 17:38@2008-12-13 79
    沿阶草

    研究下,看我能实现否。
    你的页面中都没js文件,很强大,呵呵

  80. rebutton沿阶草 / 18:01@2008-12-13 80
    沿阶草

    大概看明白了,

    这是指调用jQuery库。
    引用方式很奇特,没明白。

  81. rebuttonShawn / 19:18@2008-12-13 81
    Shawn

    @沿阶草: 我有引用 js,只是将它们合并了。具体步骤是首先调用 jQuery 库,然后根据模板写代码。

Leave Comments Here...

必填

必填&保密

随您

支持Ctrl+Enter快捷提交

  • 已部署"白忙活" Anti-Spam 系统,猪肉 Spammer 请注意查看源代码链接处。
  • 本站不会泄露您的邮件地址,敬请放心。
  • 支持常用 HTML 代码调用,插入 PHP 代码需注意:< = &lt;> = &gt;
  • 仅当某人针对您的评论做出回应时,您才会收到由本站发出的通知信件。
  • 如您希望以相同方式通知某位网友,请点击 Reply 按钮,或自行输入 @对方名字:
  • 鼠标移至评论列表中的 @someone: 区域即可自动显示 someone 的评论内容。
2 Trackbacks/Pingbacks

Shawn Blog

Focus on Wordpress, Firefox, Web 2.0, Webhosting