I’m qiqiboy !

  • Yes,I’m qiqiboy ! And my vision is world peace.
Home
|
Network
|
WordPress 完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>

完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>

| Categories: WordPress

关于WordPress的评论样式有两种:@悬浮和嵌套回复。

deep然而嵌套回复有一个问题,那就是嵌套的深度不可能无限嵌套下去,因为一般我们为了表现嵌套的视觉样式而选择让子回复向后缩进一段距离,所以随着嵌套深度的增大,子回复的宽度也就越来越小。

如右边图片所示,设置的深度过大的话,会造成最后这样的结果。

然而如果设置的允许嵌套深度太小,则会影响访客之间、访客与博主之间的交流,因为往往因为嵌套的深度到了就不能再继续回复了。

close

当然,嵌套深度的问题也有解决办法,一种就是jQuery方法:

 

很久以前看到过此篇文章《JQuery为WordPress的嵌套回复添加@reply功能》,文中所讲方法也很简单,就是利用jQuery的 克隆功能(clone())将最后一层的父级评论的回复按钮给copy到最后一层。这样一来,最后一层也会有回复按钮了,但是你点击此按钮,实际上是对倒数倒数第二层评论的回复。所有这些评论都会平级的嵌套在此父级评论下方。即对最后一层的回复都显示在最后一层的下方(不是嵌套,在同一级)。

利用此方法,你可以设置一个较小的嵌套深度,比如只允许嵌套两层,这样一来对第二层评论的回复其实都是对第一层的回复,因为第二层回复的按钮是从父级一层(第一层)克隆过来的。,所以就会顺序排列在第一层回复下方了。如下图效果:

1

但是这个方法也有一个问题,那就是当我点击克隆过来的恢复按钮时,回复框(评论框)并不是在我点击的评论下方,而是都跑到父一级评论下方,比如我要回复上面图片中的Nomessi,我点击他右边的回复按钮,按理说回复框应该在Nomessi下方,但是实际上却会跑到阿修的下方,这样就会造成误扰。如下图:22

为什么会这样呢?

我们看一下回复按钮这个对象的HTML代码:

<a onclick="return addComment.moveForm(&quot;comment-10515&quot;, &quot;10515&quot;, &quot;respond&quot;, &quot;1099&quot;)"

href="/wordpress/add-reply-function-in-wordpress-thread-comment-with-jquery.html?replytocom=10515#respond" class="comment-reply-link"

rel="nofollow" target="_blank">回复</a>

 

所以当点击回复按钮时就会调用addComment.moveForm这个JavaScript函数,他有四个参数,分别是

comment-Id:要回复的评论对象所在div的id值

 

id:要回复的评论的编号id

 

'respond':固定值

 

'post-id':即当前评论所属的文章的编号id

 

评论框在哪个位置,是看第一个参数,即要回复的评论的html的ID参数值,我们利用jQuery从父一级克隆过来按钮,所以此值还是父级评论的ID值,所以当点击恢复按钮时,评论框就会跑到父级下方了。

而如果能将此参数改成真正要回复的评论的ID,就可解决评论框跑偏的问题了。利用jQuery,这个一点也不难。

但是,第二个参数一定要是父级评论的ID,这个是设置回复的评论跟在哪一级评论下方的。我们的回复都是要跟在父级下方,所以不能搞错。

至此,这个用jQuery的方法也可以用jQuery给解决了。

但是这个方法需要jQuery,大家都知道,这玩意100来KB呢,并不是每个人都喜欢jQuery,并不是所有的平台都能处理jQuery那么大的函数库,例如一些手机浏览器,对载入jQuery的网页解析尤其费力。我知道的是挪鸡鸭的S60系统自带的浏览器就无法处理jQuery(JavaScript可以)。

所以,解决嵌套深度的问题还有一种方法。此方法是我在制作新主题时无意间想到的,不知道有没有同学想到类似的。这个方法适用于回调自定义评论函数的主题。

此方法无需任何脚本js支持。

一般的评论回调函数,回复按钮都是利用默认函数

<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>

 

生成的。

但其实通过上面我们查看实际生成的HTML代码,它就是调用了一个js函数,所以我们可以直接将HTML代码写过来。

<?php if ($depth == get_option('thread_comments_depth')) : ?>    <!-- 评论深度等于设置的最大深度 -->

<!-- 将第二个参数改为父一级评论的id -->

    <a onclick="return addComment.moveForm( 'comment-<?php comment_ID() ?>','<?php echo $comment->comment_parent; ?>', 'respond','<?php echo $comment->comment_post_ID; ?>'" href="#comment-<?php comment_ID() ?>" class="comment-reply-link">回复</a>

<?php else: ?>

<!-- 正常情况 -->

    <a onclick="return addComment.moveForm( 'comment-<?php comment_ID() ?>','<?php comment_ID() ?>', 'respond','<?php echo $comment->comment_post_ID; ?>'" href="#comment-<?php comment_ID() ?>" class="comment-reply-link >回复</a>

<?php endif; ?>

 

用这个代码替换默认的代码即可。这样就从根本上解决了嵌套的问题。效果如下,天蓝色线条就是最后一层回复了,对最后一层的评论回复,评论框正常出现在对应评论下方。111

这篇文章写太长咯,关于这段代码的解释等新主题上线后再写。还有如何评论框添加@XXX、评论添加引用quote按钮等。都是有关JavaScript的,非jQuery。

上面那张图是我的最新主题的评论样式,可以看到有回复,有引用,有自动添加@XXX等,都是原生js实现的。

声明: 本站遵循 署名-非商业性使用 3.0 共享协议. 转载请注明转自 I’m qiqiboy !
close

50 Responses to this post.

Comments (45) Trackbacks (5)
You can leave a response or Trackback this entry .
  1. WordPress嵌套评论之无限嵌套之补遗

    [...] + atname + "</a>").focus(); });后记:还可以使用qiqiboy童鞋的方法:完美解决WordPress嵌套回复的层深问题(无限嵌套) 近两天发现我的友情链接页面获取的favicon好多都失败了: [...]

  2. 添加引用按钮——轻松打造属于你的WordPress引用回复功能

    [...] 添加引用按钮——轻松打造属于你的WordPress引用回复功能 15:33 | Categories: WordPress No comments still Leave a comment 之前的《完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>》这篇文章中我讲了自己关于实现WordPress无限嵌套的一个思路。今天又有同学询问引用功能是如何实现的,我就简单说一下,有能力的同学可以折腾试试。 [...]

  3. 【效果测试展示篇】Ajax版即时侧边栏评论回复功能

    [...] 在页面上插入表单很容易,要注意的一点是要阻止表单提交默认行为,开发过表单提交前验证的应该都知道怎么做。有困难的一点是评论嵌套,因为嵌套的深度有深度,而在边栏显示的评论你并不知道它是不是最后一层了,如果你对嵌套的最后一层评论回复了,那么这条新评论就会被当做主评论显示。我之前写过《完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>》,看过的应该都知道,我是通过修改js调用脚本中传递的父级评论id值来使回复最后一层的评论在实际上嵌套到倒数第二层,这样就变相的实现了无限嵌套。 [...]

  4. 【SimPaled篇】Introduce My Blog Theme For You

    [...] 评论支持无限级嵌套,评论引用、回复功能。——注:无限嵌套参考《完美解决WordPress嵌套回复的层深问题(无限嵌套)》,引用功能参考《添加引用按钮——轻松打造属于你的WordPress引用回复功能》 [...]

  5. 完美解决wordpress无限嵌套<二> 【邮件发送相关问题】

    [...] 我曾在《完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>》中分享了我对wordpress中嵌套深度有限的应对解决办法。有同学注意到了我标题中的<一>,所以问我<二>何时出来。我回答说,没有二了,因为这个已经是完美的了,标题中的一是无意中加进去的。 [...]

Leave a Reply

avatar-default
Hi, I know you have something to tell me. Please leave me a reply.

You input 0 characters.