上一篇关于 Ajax 评论的文章中有两个缺点,分别是“不能输出合适的样式”和“没有回复链接”。下午对博客进行技术维护,现已基本 OK 了(对于我来说)。
页面 js 代码请参考上篇文章,或者参见文章结尾的演示文件。
新增一个 comment-ajax.php
依然是需要把 WordPress 根目录下的 wp-comment-post.php 复制一份,另存为 comment-ajax.php , 存到根目录(还需在 js 中指定该文件绝对路径)。
干掉 comment-ajax.php 中的 第 84、85、87 行。把下面的代码复制到该文件末尾的 ?>
之前。
//$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
//$location = apply_filters('comment_post_redirect', $location, $comment);
//wp_redirect($location);
$comment_depth = 1; //for attribute class of new comment,such as "depth-2"
$tmp_c = $comment;
while($tmp_c->comment_parent != 0){
$comment_depth++;
$tmp_c = get_comment($tmp_c->comment_parent);
}
接着,打开你的主题中的 comments.php 看一下。搜索 wp_list_comment ,找到 wp_list_comment()
或者类似 wp_list_comment('callback=dallas_list_comment')
这样的代码。如果参数中没有 callback 字样:请把下面的代码粘贴到 comment-ajax.php 中上段代码之后 的末尾, ?>
之前后(感谢zwwooooo同学的提醒)。
<ul><li>
id="li-comment-<!--?php comment_ID() ?-->"
style="display:none">
<div id="comment-<?php comment_ID(); ?>"></div></li></ul>
如果你的 comment.php 中 wp_list_comment 的函数中有 callback
,那么请打开主题下的 function.php (这种情况下没有这个文件就算是见鬼了)。找到与 callback 同名的函数,将其中的 <li>
与之间</li>
的夹杂 php 代码的 html 部分复制过来。将其中两个函数 comment_class 和 comment_reply_link 的参数改成:
//……
comment_class('',$comment_id,$comment_post_ID);
//……
comment_reply_link(
array(
'depth' => $comment_depth,
'max_depth' => get_option('thread_comments_depth')
),$comment_id,$comment_post_ID)
//……
实际就是改成与我给出的代码相似的样子。就是这些,再按照上篇文章中搞定 js 就 OK 了。
还可以更完美点儿?
很多人喜欢评论呈现隔条变色的样式,所以 WordPress 为每条评论都添加了 odd alt thread-odd thread-alt 或者 even thread-even 等 class 。现在唯一的瑕疵就是,comment-ajax.php 输出的都是 even、thread-even ……
由于不在主循环里,获取这些值就麻烦了。所以还是交给 js 处理吧。上篇文章中的 js 代码,修改 var $newc = $child_list.find('li:last');
为:
var $newc = $child_list.find('li:last');
if($newc.prev().length){
var $c = $newc.prev();
if( $c.hasClass('even')){
$newc.removeClass('even').addClass('odd alt');
}
if( $c.hasClass('thread-even')){
$newc.removeClass('thead-even').addClass('thread-odd thread-alt');
}
}
- 本文贴出的代码,依旧与本博客所使用的不一样。
- 给出的 js 代码需要 jQuery 框架。
- 如果你还使用了其他框架,可能因命名空间问题导致 js 失效。
- js 代码不适用于所有主题,如发生页面错乱,请自行修改。
- 如果有人应用成功,别忘记通知我下~
完整的参考文件
- 该 php 文件修改自 WordPress 2.8 的 wp-comment-post.php ;
- 在 WordPress 2.8 + Default 下测试通过。
- 在 WordPress 2.8 中,生成的回复链接有误,没有相关 js 则不能工作,原因未知。
技术牛人啊!~WP的吗?
技术牛人啊!—— 不敢当 WP的吗? —— 是啊~
我测试一下,嘿嘿!
我再来测试一下
我是来测试的
测试
不懂,真不懂、
Test!
测试下回复
我也是来测试的
CSCS
同样测试一下
测试
测试回复
純測試。
主题都换了,代码早就撤下了。
可为什么在IE下感觉那个数字 位置不对了
呵呵,我也早发现了。这个应该是我 CSS 没有处理好
哪里都能看见卢松松
我一直在考虑着要不要用 wp2.7 的评论功能,对嵌套的样式设计总是不满意,我喜欢整整齐齐的,不喜欢套来套去,哈哈。
另一个分页功能对我来说目前还用不着,评论不多啊!
只用 @ 来表示回复关系的话,让人看得发蒙。要是加上鼠标掠过 @ 即显示原评论,也很不错。 这个分页功能很难用,比方这个“鼠标掠过显示原评论”,本来用 js 从页面上复制即可,分页后得用 ajax 了
不错,我来试下!!呵呵!
至此已经有 8 条声明测试的评论了……
我也寫了一個, 不大一樣, 先試~
不錯! 再試~ 歡迎也到我站試試~
還有, 自己的評論不用"回覆"鏈接.
嘿嘿,万一自己想回复呢?比方换个马甲之后……
222222222222222222222222222222
借个地儿,我测试一下。有个 bug 不知道搞定没有。
呵呵~ 評論框沒回去~
恩。我觉得,评论框也跟着消失了会让我很困惑
评论回复测试~~
willin大侠的突然用不了了 来试试这个
其实我这个也比较麻烦。好在升级了2.9之后没发现有什么问题
测试下哈!
不过不管怎样,这篇还是收藏,说不准哪天我会用到呢!
测试评论
test~~~
测试
test
。。都在GOOGLE READER 里看了,网站配色真漂亮。
嵌套评论就那么好吗。看很多人在问。
……我比较喜欢。原生支持,关系明确。 其实谈不上配色,我都是直接输入的颜色代码,根本不知道配不配的……
我相当喜欢你这不知道的配色。。。
留着留着。
逮到你了,话说你那儿该有个 ajax 评论哦。顺便问个问题,我这里的评论前面的 数字标号,在 IE 下怎么都出现在头像的位置上了?
所以,我收藏,收藏。那个似乎是因为list列表的问题之类的。我又要修改论文了,真是没心搞代码。但看了一下又看不出来。等我修改完再看看。-,-...
今天才把blog的主题支持原生嵌套了,来你这里学习原生嵌套ajax评论。
哈哈,不错
一直都是使用comment ajax评论嵌套,方便也好使~~
牛人 我先试试
可以直接嵌套不?
很哈皮是把~~
真他妈拽,你文章别删除哦,以后我研究研究。
试试 好像这个很完美
汗死 又看到了 来看看
Warning: file_get_contents(http://search.twitter.com/search.atom?q=from:dallaslu&rpp=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway in /home/dallaslu/public_html/wp-content/themes/dallas/template-home.php on line 56
这是什么?还在测试,没稳定吧?
首页从 Twitter 抓取一推。Twitter 挂了,我这就废废了。 看来,应该试试从 Thread Twitter 这个插件抓取的数据里来读一条
Thanks for the useful info. It's so interesting
测试看看
测试
测试一下。
我今天试了下提示comments-ajax.php文件的这句语法错误: <li ...
不知什么原因
是不是忘了开头: function ajax_comment_output($comment, $args, $depth) { $GLOBALS['comment'] = $comment; ?>
和结尾: <?php }
ajax_comment_output($comment,null,null);
这个,上篇文章里给写成了函数,而这篇没有。 写不写成函数都可以的,这里只要输出就成。
不写成函数会提示第一行开头那行函数错误
comment_class('',$comment_id,$comment_post_ID)
恩,的确是……严重的描述失误。已经修改
应该不会吧?是这一行? comment_class('',$comment_id,$comment_post_ID)
[...] 更新:修正的 php 和 js 请参见《WP27 完美 AJAX 嵌套评论》,还提供了完整的参考文件。 [...]
[...] 如果用 ajax 方式提交评论,刷新页面才看得到隐藏内容。 [...]
折腾了好一下,没搞定。如果加上“还可以更完美点儿?”后面的情况就是:回复后真个回复框是灰色,要ctrl+f5重新载入才能恢复和看到新的评论。如果不加上“还可以更完美点儿?”后面的,那么就回复框能恢复,但新评论还是要刷新(f5就可以了)才能显示。不知是哪里搞错了还是我的模板问题
您能再根据演示文件折腾下吗?我看看……
明天再折腾一下看看
今天重新试了下,还是有问题: FF和Chrome下直接发表评论后新评论老是跑到上面算下来第4个评论里面——不是嵌套样式。 IE6下又正常,但加载comments.js提示网页错误
嵌套回复倒是全部正常。
js修改的地方是这里:if($parent.attr('id')=='content'){ //父元素若是main(与我模板有关) 这个应该没问题,我的主题comments的父元素就是content,不改就不会出现新评论
我的主题里是这样的:<ol class="commentlist" id="commentlist"> 而你的不是。 修改部分 js 代码试试
//....... if(!$('ol.commentlist').length){ $respond.before('); } if($parent.attr('id')=='content'){ $child_list = $('ol.commentlist'); // ........
改了,还是一样,看来是我的模版问题了
直接发表评论是显示在最后一个嵌套回复的评论里面,所以还是js的问题。我不懂js所以只能麻烦你看看
嗯,好像搞定了,还是id问题 我把
if($parent.attr('id')=='content')
改为,if($parent.attr('id')=='commentlist')
因为我的ol.commentlist
的父级是#commentlist
,纳闷,貌似comments写的不是很标准不过ie6下加载js文件就提示网页错误,虽然不爽,但将就用着先吧
IE6 ? 莫非是找不到元素?删掉这行 var $loading = $('#loading') 试试。
还是我,原来是我的comments.php没按标准定义id,折腾那么久。对了,你文章里还有一个书写错误,就是文件名comment-ajax.php应该改为comments-ajax.php,昨天就发现了但一直折腾忘了跟你说一声。 另:我能否把此文章相关内容转载到我博客?
无所谓标准不标准,都是主题的自由~但是 js 就不一定适用了,我是根据我主题来的。 改为 comments 更符合语义,但也无所谓了哈~ 本文就是供折腾犯参考的,当然也欢迎折腾犯们转载
我是来试下这个行不行的。
正在搞这个东西,先测试下!
好像很完美的样子
我似乎来过……
欢迎欢迎~我怎么没印象捏~
想起来了,我从zwwooooo那边链接过来几次。当时还纳闷儿,怎么颜色是这个样子滴
-_- 颜色怎么了
WordPress2.8变成了87~90行了!
是啊。我记得我明明在文中提到啊,怎么没了……
这个网站给体验很好
:-) 谢谢夸奖~~
就因为好,我订阅了,以后自己做的时候还望指教
等啥时候我会把我的评论部分的代码整成嵌套的了再来回看,我的评论部分的代码太旧了...
看你的博客 —— 就知道你是标准折腾犯!你的评论部分还不错
是在这里?
不行啊 看不懂 写得不清楚 像那个JS 不知道存什么名字
呃,看来的确需要提下。存为 comment-ajax.js,还要加载 jQuery 。
测试下看看
第一条留言能完美的刷新出来么
Test!~
,但加载comments.js提示网页错误
嵌套回复倒是全部正常。
js修改的地方是这里:
if($parent.attr(’id’)==’content’){ //父元素若是main(与我模板有关)
这个应该没问题,我的主题comments的父元素就是content,不改就不会出现新评论 回复看看,以前做好的,现在又弄不上了。。
测试一下,看看效果如何
评论呈现隔条变色的样式,但我的不是嵌套评论的啊,我的是alt/even的样式,但ajax只呈现一种样式,请问博主js如何处理? php有什么好的方法实现?
我这也是 js 处理的。用 php 比较麻烦。文章末那段代码就可以的啊
在ishawn.net博客,ajax评论样式是可以隔条改变的...
//....... if(!$('ol.commentlist').length){ $respond.before('); } if($parent.attr('id')=='content'){ $child_list = $('ol.commentlist'); // ........
我的不是这样的样式呀,而是
}else{ ?>........我不会用js处理,用什么js代码来实现啊!
你博客是?用的是 Yinheli 的主题?
滑动效果好呀!
测试一下。
用的是MG12的主题,上面的主题代码和我的主题差不多的,只不过我加上了一些功能而已!对了博主用这种主题AJAX留言JS是怎样写啊,不用JS判断留言,所以留言不会自动隔层分色的,是不是判断单复数样式的还是其它的?
根据新留言的上一条样式,来给新留言增加样式就可以了吧
我的 Ajax comments 發佈了, 請指教囉! http://willin.atbhost.net/?p=1271
用quick comments有很多问题,来试试这个~~
我也是来测试的。
谢谢分享,我体验下了,呵呵
再来测试。
再来测试。...
需要看一看,可以的话再折腾。哦 对了。和AJAX评论插件有什么区别?
基于 WordPress 原生嵌套评论
测试
测试下
测试
测试下
测试下,看小效果怎么样。
test
啊?2.8不能用啊?白折腾了……
不是不能用,就是生成的回复链接有问题。这个问题也不影响正常使用,但如果浏览器禁用了 js ,就没办法回复评论了
非常不错,也试试这个功能!
测试一下看看。
不需要输入名字?
不错。。。。。。。
我也来试一下
我也来试一下
好酷啊
学习一下
嵌套评论,又爱又恨啊
啊 试试。
正需要这个 现在在学习
我网站的回复为什么会突然无效了呢?
我去发了一条,好像很正常啊
是嵌套回复失灵了!
试试更新或者重新安装下 wordpress-thread-comment 这个插件吧
test
test~~~
大家一起来测试
测试............
测试测试
我的博客安装了wordpress-thread-comment ,为什么AJAX没有用??
简单看了一下。没看出是哪有问题……换下默认主题试试看?
我的博客http://www.dreamershop.org/
测试一下~
[...] 但我还是把它留着) 3. 套用你所使用模板的 class 属性. (感谢 Dallas Lu 在先前已找到好方法, 我又在 js 中加了判断式) 4. 评论数量即时更新显示. [...]
测试一下
我也看看效果。。
我也是来测试的 效果不错 不过请问这样修改最多可以嵌套几层? 四层就已经太右边了
不好意思,时隔近一年回复;最多可以嵌套5层;因为太多层的话,就不好显示了,宽度不够了。
PS,我也是顺便测试一下3.1中这个AJAX评论是否还好用。:)
test
test again
test 3
先标记一下,晚上下班了回去研究。
试一下评论哦
刚才没成功,再试一下
好了
我是来测试留言的
经过测试已经成功
恭喜~
TEST COMMENTS
我试试最新版的
我那里嵌套的两层之间的间距太宽了,可以修改什么使它变窄吗?我想支持更多层次的嵌套
主题的样式文件 style.css ,285行附近,#content ul 的 padding 值改成 0
看看什么效果
我也来试试!
没想到松松抢沙发还有一手啊。
测试测试。
我来测试下
看看你的方法,效果怎么样。
我也是来测试的
看一下嵌套的效果怎么样啊。
我也来测试,呵呵。。 顺便请教如何修改”提交成功, 刷新页面之前可以再编辑“这句提示的显示位置及字体大小。
你说的这个功能我这里并没有实现啊,你以本文标题去 google 一下,相关的几篇文章中好像提到这个问题
我来测试的。
似乎不错。
受教了, 我最近在做wordpress主题,这个对我很有用呀。
just ajax test
目前 ajax 出现了点儿问题
现在已经修复了噢
现在用ajax评论的是越来越多了
确切地说是从两年多以前就已经流行开来了。
我测试了好多AJAX都没用,最后用了个插件。。。
那你觉得本站的 ajax 如何呢?
testsd
eeeeee
test