前几天看到一个Blog(忘记了名字和网站),评论功能非常实用。访客留言后,数据输入框会被隐藏,就像登录一样。访问者可以选择在评论前修改相关数据,给访问者带来良好的用户体验。今天我把这个功能移植到了自己的主题上,所以制作起来并不难。分享一下。
要求
细心的朋友可能已经注意到了:当您在WordPress评论后再次访问博客时,您不需要再次填写数据,因为它们已经在数据输入框中。但是,如果您没有注释或清除Cookie,数据输入框将为空。
1.当访问者的数据已经存在的时候,访问者对数据本身的关注就很少了,那些数据输入框就会变得‘碍眼’,所以我们要想办法把它们隐藏起来。同时,我们需要显示访问者的姓名,否则他/她根本不知道自己的身份。
2.访问者可能会更改他的电子邮件地址,或者只是想更改一个很酷的名字。这个时候,他/她肯定想更改信息。因此,需要一些措施,以便访问者可以再次看到信息输入框。
3.对于从未提供信息的访问者,必须向他们提供信息输入框。
分析
从需求可以看出,我们要处理两种状态:有数据的访客:和没有数据的访客。有数据的有两种状态:显示数据输入框(显示昵称)和隐藏数据输入框(显示昵称)。对于没有数据的访客,只有一种状态:显示数据输入框(没有昵称)。好的,我们将为访问者提供两个按钮(更改和取消)的数据,一个用于显示数据输入框。
思考
1.页面怎么写?在编码之前,我们也应该理清思路。使用伪代码。
If(有信息的访问者){放访问者昵称放更改按钮(点击:隐藏更改按钮,显示取消按钮,显示数据输入框)放取消按钮(点击:显示更改按钮,隐藏取消按钮,隐藏数据输入框)}放数据输入框if(有信息的访问者){隐藏取消按钮隐藏数据输入框}2。如何知道访客有没有评论?如前所述,将显示评论访问者的信息,也就是说,获取信息的方法已经在代码中实现。让我们寻找它。
输入类型=' text ' name=' author ' id=' author ' value='?php echo $ comment _ author?'tabindex=' 1 '/就是这样!$comment_author是访问者的昵称。当它为空时,意味着访问者信息为空。
3.有些控件是显示和隐藏的,怎么做?我们不需要为此跳转到页面,所以使用JavaScript。我们可以编写一个方法来设置一些控件是否显示,这只是一个非常简单的方法。36960 . 66666666666
/* * *设置控件的显示样式* @param id控件ID * @param status控件显示状态('显示时'和'隐藏时无')*/function setstyledisplay (id,status){ document . getelementbyid(ID)。style.display=status}代码
然后呢?您可能可以编写代码。看看我的。
!-有资料的访客- ?php if ($comment_author!='' ) :-转换显示状态用的JavaScript Q1:为什么这段代码放在这里呢?A1:因为只有当访客有资料时,它才被用上,这样可以减少无资料访客下载页面时的开销Q2:为什么不用外部文件将Java脚本语言放起来?也许那样维护起来更方便A2:因为它只在这个地方用到了。而且加载文件的数量也会影响页面下载速度,为了这么点字节的代码,不值得新开一个文件。-脚本类型='text/javascript '函数setStyleDisplay(id,status){ document。getelementbyid(id)。风格。显示=状态;}/script div class=' form _ row small '!-访客昵称(随便欢迎一下) - ?php printf(__('欢迎回来strong%s/strong .),$comment_author)?-更改按钮(点击后: 隐藏更改按钮,显示取消按钮,显示资料输入框)-span id=' show _ author _ info ' a href=' JavaScript 33: setstyle display(' author _ info ',' ');setstyle display(' show _ author _ info ',' none ');setstyle display(' hide _ author _ info ',' ');PHP _ e(' Change ');/a/span!-取消按钮(点击后: 显示更改按钮,隐藏取消按钮,隐藏资料输入框)-span id=' hide _ author _ info ' a href=' JavaScript 33: setstyle display '(author _ info ',' none ');setstyle display(' show _ author _ info ',' ');setstyle display(' hide _ author _ info ',' none ');PHP _ e(' Close ');/a/span /div?php endif?-资料输入框-div id=' author _ info ' div class=' form _ row '输入类型=' text ' name=' author ' id=' author ' value='?php echo $ comment _ author?tabindex=' 1 '/label for=' author ' class=' small '?PHP _ e(' Name ');php if ($req) _e '(必需)');/label/div class=' form _ row '输入类型=' text ' name=' email ' id=' email ' value='?php echo $ comment _ author _ email?tabindex='2' /标签为='email' class='small '?php _e('电子邮件(不会发布)');php if ($req) _e '(必需)');/label /div div class='form_row '输入类型=“文本”名称='url' id='url '值='?php echo $ comment _ author _ url?tabindex='3' /标签为='url' class='small '?php _e('网站');/label /div /div!-有资料的访客- ?php if ($comment_author!='' ) :-隐藏取消按钮,隐藏资料输入框-脚本类型=' text/JavaScript ' setstyle display(' hide _ author _ info ',' none ');setStyleDisplay('author_info ',' none ');/脚本?php endif?访客评论显示欢迎信息
关键问题:获取访客信息
花点时间去研究,其实整个实现过程并不复杂。这里的关键点是,如何判断访客已经在近期发表过评论。
当访客评论时,会在饼干中保存评论者的信息。我们可以通过萤火虫或者铬的开发人员工具来查看:
文件。cookie ' comment _ author _ bbfa 5b 726 c6b 7 a9 cf 3c da 9370 be 3 ee 91=hello world;comment _ author _ email _ bbfa 5b 726 c6b 7 a9 cf 3c da 9370 be 3 ee 91=dang accan @ Gmail。' com'comment _ author _ URL _ bbfa 5b 726 c6b 7 a9 cf 3c da 9370 be 3 ee 91=http://example。' com '从上面可以看到有三个与评论相关的信息,它们分别是评论作者,评论作者网址,评论作者电子邮件。不过中间夹杂着字符串bbfa 5b 726 c6b 7 a9 cf 3c da 9370 be 3ee 91,我们可以看下default-constants.php的代码,就可以知道这一段叫做COOKIEHASH,它的值是博客统一资源定位器的讯息摘要5值。
导入hashlib hashlib。MD5(' http://localhost/WordPress ').hex digest()“bbfa 5b 726 c6b 7 a9 cf 3c da 9370 be 3ee 91”我们只需要了解到这一点就可以了,因为这些信息WordPress已经在注释_模板方法中,通过wp_get_current_commenter为我们从饼干中解析了访客的信息。例如,我们可以在comment.php文件中,直接用$comment_author来获取保存在饼干中的访客姓名。
代码实现
接下来的实现就很简单了,我们通过判断$comment_author变量值是否为空,来确定访客是否在近期有评论(有饼干).
if(!is _ user _ log in()!空($ comment _ author)){ 0.}如果有,则在评论框上方显示欢迎信息:
if(!is _ user _ log in()!empty($ comment _ author)){ $ welcome _ log in=' p id=' welcome-log in ' span欢迎回来很强$评论_作者./strong ./span ';$欢迎登录.=' span id='切换-作者u更改/u I class=' icon-注销'/I/span/p ';$ comments _ args[' comment _ field ']='/div ' .$ comments _ args[' comment _ field '];$ comments _ args[' comment _ notes _ before ']=$ welcome _ log in .div id=' author-info ' class=' hide ';}以上代码,需要添加到主题的comment.php文件comment_form($comments_args)方法调用之前。
接下来,我们通过爪哇岛描述语言来实现访客信息更改:
/*切换注释用户*/$(“# comments”).on('click ',' #toggle-author ',function () { $('#author-info ')).滑动切换(函数(){ if ($(this)).是(' :隐藏'){/*更新欢迎消息中的作者姓名*/$('#welcome-login strong ').html($('#author ').val());/*更新切换动作名称*/$(“# toggle-author u”).html(")更改');} else { /*更新切换动作名称*/$(“# toggle-author u”).html(")隐藏');} });});这样,如果用户需要更新信息时,可以点击欢迎信息右侧的更改按钮;修改完成之后,用户信息会在评论后更新。