前篇关于comments.php移植中的一个难题就是评论回复表单,这里也算是做一个记录,把回复表单的问题解决掉。我个人参考了几个主题,所以把最简单的和体验最好的分别记录下来,本篇是第一部分。
回复移动表单是嵌套回复的一个功能,当你对某条评论点击回复按钮时,评论框会自动移到这条评论下面,这就不需要刷新页面了。

步骤一

首先是确认在评论模板comments.php中的评论表单区域的完整性,因为回复评论时是直接引用这个区域的,其中有一个取消回复按钮,一般放在评论表单区标题的头部,比如:回复 XXX 的评论 ———— 取消回复 。可以用一个a标签来定义:

<a id="cancel-comment-reply-link"  href="javascript:;">取消回复</a>

还有一个东西:

<?php comment_id_fields(); ?>

这是获取评论id用的,必须放在提交表单form标签里面(一般放在提交按钮后面)
以上两个是必需的,然后是对它们添加css进行样式化,这个根据个人主题风格而定。

步骤二

添加js代码。这段jswp已经自带了,TwentyTwelve主题就是引用这个js来实现该功能的,下面这段非常简单的代码来自 wp-inclues/js/comment-reply.js :

var addComment={moveForm:function(a,b,c,d){var e,f=this,g=f.I(a),h=f.I(c),i=f.I("cancel-comment-reply-link"),j=f.I("comment_parent"),k=f.I("comment_post_ID");if(g&&h&&i&&j){f.respondId=c,d=d||!1,f.I("wp-temp-form-div")||(e=document.createElement("div"),e.id="wp-temp-form-div",e.style.display="none",h.parentNode.insertBefore(e,h)),g.parentNode.insertBefore(h,g.nextSibling),k&&d&&(k.value=d),j.value=b,i.style.display="",i.onclick=function(){var a=addComment,b=a.I("wp-temp-form-div"),c=a.I(a.respondId);if(b&&c)return a.I("comment_parent").value="0",b.parentNode.insertBefore(c,b),b.parentNode.removeChild(b),this.style.display="none",this.onclick=null,!1};try{f.I("comment").focus()}catch(l){}return!1}},I:function(a){return document.getElementById(a)}};

如果不起作用,先检查你是否满足了步骤一的条件,然后看看你的整个评论区的id是否为comments;还有评论表单的id是否为respond;评论列表的class是否为comment-list。满足这些基本就出效果了,效果就是:每当你点击一条评论上的回复按钮时,回复表单就会出现在这条回复的下方。


若想在点击回复时,滚动定位到该条评论,可以在结尾为"nextSibling),"这句后面添加scrollTop方法(id为评论表单):

$('body,html').animate( { scrollTop: $('#respond').offset().top - 150 }, 400);

若想在点击取消回复时,还原位置,可以在结尾为"respondId);"这句后面添加scrollTop方法(id为评论区):

$('body,html').animate( { scrollTop: $('#comments').offset().top - 150 }, 400);

回复评论表单
不过这样也有一个小小的缺点:就是在使用移动设备屏幕较小 并且回复嵌套又比较多时,回复表单就会被挤得很小。

回复评论表单

为了解决这一点,我们可以自定一种回复表单 再自定义它出现的位置,不受上述情况影响,这样用户体验就会比较好了。本人将会在第二部分中进行记录。