虽说网站也没啥人,但是总觉得没有评论功能是不完整的。而且,wordpress自带的评论功能也不是很满意,在文章中使用自带的评论功能勉强还可以,毕竟需求不是很大。之所以想改造一下评论模板的结构,是因为想在说说下方直接进行评论,而关键的函数就是wordpress自带的comment_form()这个比较强大的模板函数。但是由于说说页面以及wordpress本身的特点和我本身的需求,造成了一些麻烦。
1.
comment_form()是用于单个文章(single)或页面(page),而说说表面上看起来是一条条简短的文字形成的展示,实际上却是自定义类型的文章,只是没有相应的single页面(当然也可以有,但是个人没那个需求),因此实际上是把多个single的内容简化凑在了一个页面进行展示,而且每条说说下面必然有一个回复框,因此造成了一个页面同时出现了多个comment_form。
2.
由于comment_form并非刻意让我们完全自定义form表单的结构,只是进行了一些局部的修改,因此页面中出现多个comment_form时,就会有多个相同的id出现,因此无法正常使用wordpress其自带的replytocom参数进行回复。
3.
由于使用wordpress自带的回复链接会进行跳转,会造成一些麻烦。就拿我的需求来说:我本身希望评论框正常情况下是隐藏的(display为none),点击评论才会出现,而进行跳转后,由于是新页面所以评论框被隐藏,而且同一页面有多条说说,因此该情况十分不友好。解决办法有两个,一个就是ajax,一个就是利用js动态改变form参数,而不是直接利用跳转页面获取新的comment_form。
综上,由于我个人的需求以及对wordpress的comment_form结构的观察,特别是type为hidden的那些隐藏的input字段,找到了参数的变化规律。可以先看一下表单的结构:
<form action="http://localhost/wp-comments-post.php" method="post" id="my_shuoshuo_comment" class="comment-form"> <p class="logged-in-as"><a href="http://localhost/wp-admin/profile.php" aria-label="已登入为雪峰。编辑您的个人资料。">已登入为雪峰</a>。<a href="http://localhost/wp-login.php?action=logout&redirect_to=http%3A%2F%2Flocalhost%2Farchives%2Fshuo%2F483&_wpnonce=e304ead111">登出?</a></p><p class="comment-form-comment"><textarea id="shuo_comment" name="comment" aria-required="true"></textarea></p><input name="redirect_to" type="hidden" value="http://localhost/shuo""><p class="form-submit"><input name="submit" type="submit" id="my_shuoshuo_submit" class="submit" value="发表评论"> <input type="hidden" name="comment_post_ID" value="483" id="comment_post_ID"> <input type="hidden" name="comment_parent" id="comment_parent" value="0"> </p><input type="hidden" id="_wp_unfiltered_html_comment_disabled" name="_wp_unfiltered_html_comment" value="3d728d7e68"><script>(function(){if(window===window.parent){document.getElementById('_wp_unfiltered_html_comment_disabled').name='_wp_unfiltered_html_comment';}})();</script> </form>
只需要仔细观察那些hidden的input字段所代表的意义即可,可以看出它们的id名称对应着一条comment的数据库字段。其实,如果不是点击回复其他人,这些代码根本不需要改变,主要是因为对其他人进行回复时才会进行跳转,而且所带的replytocom参数正是所进行回复评论的comment_ID,因此改变的参数只有一个,即comment_parent,只需对其进行相应修改即可轻松实现无跳转回复。
嘛,虽然看似很简单,这也是我折腾了一会才弄出来的,不容易啊。
接下来就看看效果图吧:
后期还想加个表情功能,嗯,有空再折腾。
可能会遇到的问题:
即使有评论也不展示,只出现评论框:在这种自定义文章中,即使开启了允许评论而且该文章中有评论,使用get_comments()也不会也内容出现,解决的办法是在上面开启全局变量,设置参数开启:
global $withcomments;//强制开启评论显示 $withcomments = 1; if ( comments_open() || get_comments_number() ) { //代码 }
PS:获取单条评论信息时,无法用get_comments(ID=xxx)进行获取,只能使用get_comment(ID)进行获取相应内容,这也是小坑,问题解决办法来源:Get comment content by comment ID
发表回复
要发表评论,您必须先登录。