WordPress 2.7~3.0原生嵌套评论的AJAX实现办法

适用于 WordPress 3.5+ 请移步到这里《适用于 WordPress3.5+ 的 Willin 版本 AJAX 评论提交

从昨天开始就一直在折腾WordPress 2.7原生嵌套评论的AJAX效果,但根据 Lorz 的文章《WordPress 完美 AJAX 嵌套评论》愣是没折腾成功。后来在 Lorz 的帮助下,今天终于搞定了。

大家应该知道WordPress 2.7原生嵌套评论函数是wp_list_comment(),但不知什么原因很多评论插件都没有支持此函数,自从我自己折腾模板时评论函数就一直是使用wp_list_comment() ,也曾经折腾过试嵌套评论支持 Ajax,但一直就没成功过,原因嘛,就是不懂php+js,哈哈

既然折腾成功了,那么就要分享。喜欢折腾的朋友可以直接去 Lorz 的文章《WordPress 完美 AJAX 嵌套评论》,我这里只写出具体的步骤,原理什么的就算了,因为我也不怎么懂。

……由于直接粘贴代码出错,以前的内容删除,具体看下面

2009.7.7 Update

昨天开始跟willin讨论他编写的wp2.7嵌套评论,根据willin的comments-ajax.js和comments-ajax.php我修改上面讨论的wp2.7(wp2.8)嵌套,解决了一直存在的问题:

1. 嵌套回复后留言框不能自己回到下面
2. comments-ajax.php是放在wordpress根目录下的,不知怎样移到模版下(直接移到其他目录会出错)
3. 评论总数显示错误。

上面说了,粘贴代码会出错,所以具体的代码修改方法也不写了,直接提供comments-ajax.js和comments-ajax.php文件下载:ziddu网盘下载 / uushare下载

下载好后按照下面的步骤:

一、下载这两个文件后,用文本编辑软件打开 comments-ajax.js 查找"zwwooooo"然后按照标示的说明修改就可以了(要修改的地方我都用"zwwooooo"标示并写有说明),修改好后把这2个文件上传到你的主题目录下。

二、打开主题文件footer.php,把下面的代码加到<?php wp_footer(); ?>下面

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
<script src="<?php bloginfo('template_directory'); ?>/comments-ajax.js" type="text/javascript"></script>

三、然后打开主题文件comments.php,找到类似下面的

<h2 id="comments"><?php comments_number('0 Responses', '1 Responses', '% Responses' );?> to &#8220;<?php the_title(); ?>&#8221;</h2>

改为

<h2 id="comments"><span id="comment-num"><?php comments_number('0', '1', '%' );?></span> Responses to &#8220;<?php the_title(); ?>&#8221;</h2>

OK了,试试吧。

补充:(2009.7.8)

如果你的主题里面的 comment.php 中 wp_list_comment 的函数中有 callback ,那么请打开主题下的 function.php 。找到与 callback 同名的函数,将其中的 <li></li> 之间的夹杂 php 代码的 html 部分复制过来替换 comments-ajax.php 里面最后面那里的 <li></li> 之间的内容。接着将其中两个函数 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)
//……

本文所说在 wordpress 2.7 和 2.8下测试成功,因为我已经升级为 wp2.8 ,所以 2.7 会稍微不同,但按原理来说下载的文件应该兼容 wp2.7 ,各位慢慢折腾吧。

2009.8.15 Update:

willin 最新折腾出的方法,很方便,不需要修改文章里说的两个文件就可以用了,而且效果比这个好:《WordPress 内置嵌套评论专用 Ajax comments

PS:不知是不是因为服务器环境问题,willin最新的方法我这里失效,但经过willin'阉割'的版本就OK了--把"刷新前可以编辑自己的新评论"功能去掉,效果大家可以直接评论试试。 2009.8.18 willin已经解决此问题了,只要重新下载下面的'willin提供的下载'就可以了

willin提供的下载地址: comments-ajax.zip

如果出现我'PS'所说的状况,可以用和我一样的: ziddu网盘

2009.10.21 Update:

下载 comments-ajax.zip (8.90k) (v1.26 2009/10/21 更新)
下载 comments-ajax(no-edit).zip (7.96k) (v1.26 2009/10/21 更新, “无在编辑版” )

2010.5.20 Update:

最新的 1.29 版本下载(支持WP2.9.x):uushare网盘 (2010.3.25 by willin)

最新的 1.3 版本下载(只能用在WP3.0.x):uushare网盘 (2010.5.20 by willin)

具体方法直接去这里吧:http://kan.willin.org/?p=1271

这里说说使用方法:

1. 解压下载到的压缩文件得到2个文件:comments-ajax.js、comments-ajax.php,把其放到到所使用的主题目录下

2. 打开所用主题的 header.php(有些主题是在 footer.php)找到下面的代码

<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>

替换为

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<?php if ( is_singular() ){ ?>
	<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/comments-ajax.js"></script>
<?php } ?>

如果你所使用的主题评论结构够规范,那么就可以工作了

zww
or
oooo

“WordPress 2.7~3.0原生嵌套评论的AJAX实现办法”有226条评论

  1. 阿婆 says:

    你今天AJAX了没?不如你帮我弄吧,我快虚脱了。是社会把一个喜欢折腾的人变成了颓废的人,你愿意解救一个这样的人吗?

  2. 小T says:

    来,先试下效果,文先收藏了,有空整整

  3. zwwooooo says:

    @阿婆 说的真严重,我的好像搞好了,嘻嘻。如果你的模板用的是2.7的函数那么就照我这篇文章折腾吧

    @小T 有什么问题记得说一声

    1. willin says:

      我自己也寫了一個, 但不是這麼寫,先試一下~

      1. willin says:

        評論框沒回去?

      2. willin says:

        測試~ 歡迎也到我站測試~

        1. zwwooooo says:

          评论框没回去是个问题,我解决不了,希望你能搞定共享一下

          1. a says:

            sd

  4. 托尔 · 银月 says:

    我来看看怎么样

    1. zwwooooo says:

      @托尔 · 银月 刚才貌似上传错了文件,现在试试

  5. 托尔 · 银月 says:

    重新开始测试~~~
    天津铁通~~~~第二次测试

  6. 砼砼 says:

    你终于还是折腾出来了啊

  7. 砼砼 says:

    错位了,,,明明应该是在最后的说

    1. zwwooooo says:

      怎样错位?我测试咋好好的,我再试试

    2. zwwooooo says:

      是有错位,我记得更正了的?难道是昨天发错文件后来再修改的文件忘了?

      已经修正,这下应该没问题了

      1. rgb says:

        测试一下

        1. rgb says:

          失败,评论需要刷新

          1. zwwooooo says:

            没有,我今天修改了一个模板文件忘记开启了,呵呵,不信你现在试试。

          2. rgb says:

            我再试试

        2. rgb says:

          反应速度超慢啊

          1. zwwooooo says:

            如果是ie的话会慢,ie载入图片很慢,不知为啥。ff就不会

          2. rgb says:

            照你的代码拷贝,可害惨了我,全角”要改成半角",

          3. zwwooooo says:

            通常拷贝都是这样的,没办法,我没装类似代码高亮的插件。我从别人那里拷贝时也一样,不过用文本编辑器的替换很简单的。

  8. kerby says:

    我是来看效果的

  9. 爱月 says:

    函数函数又见函数~这几天怎么就跟函数过不去啊~~~

  10. 阿修 says:

    额……由于样式原因,放弃这个嵌套评论了,觉得 @ 的方式清爽一些,看着整齐。
    留着以后用~哈哈

  11. zwwooooo says:

    @kerby 效果如何?没问题吧?

    @爱月 我也对函数头疼,对js更头疼

    @阿修 其实2.7嵌套也可以设计非常不错的样式,只是貌似复杂点

    1. 阿修 says:

      我的意思是,想象力最近太贫乏了……完全想不出来做什么样子好,所以与其那么丑着还不如空着先不做。

      1. zwwooooo says:

        @阿修 我缺乏技术,就是想到了也做不出来……

        1. 阿修 says:

          谦虚什么~你要这么折腾下去,早晚成专家! :idea:

          1. zwwooooo says:

            没办法,没时间花在这,而且通常是学了就忘了

  12. 卢松松 says:

    AJAX,确实是个很不错的东西

    1. zwwooooo says:

      @卢松松 是不错,但就是难懂,应该说没动力去学

  13. kramon says:

    这个挺实用的!

    1. zwwooooo says:

      没想到竟然搞定了,哈哈

  14. bolo says:

    好好学习,准备做主题

  15. Leo.N says:

    折腾了两天,实验了N多的插件和方法,就是实现不了完美的ajax回复,今天google偶然看见你这个办法,看样子对我的主题来说比较靠谱,但实在找不到commentlist的父元素,所以特来请教下commentlist的父元素在哪找?

    1. zwwooooo says:

      一般是single.php里面“”所在的div的id就是commetlist的父元素。还要注意你的评论调用时下面这种:
      《ol class="commentlist"》
      《?php wp_list_comments(); ?》
      《/ol》
      还是
      《ol class="commentlist" id=commentlist》
      《?php wp_list_comments(); ?》
      《/ol》
      (注:因为会出错,所以我把<>用《》表示)
      如果是第一种那么comments-ajax.js里面的:

      if(!$('#commentlist').length)

      要改为

      if(!$('ol.commentlist').length)
      $child_list = $('#commentlist');

      要改为

      $child_list = $('ol.commentlist');
      1. Leo.N says:

        额。。非常感谢回答,我找到了,和你的一样,也是content,但是那啥,我改了2个小时还是实现不了ajax回复,放弃了。。
        最后还是非常感谢您的回答。。谢谢了!

        1. zwwooooo says:

          不用谢,我改了一整天……

  16. 测试可以故意 says:

    路过的

  17. 林木木 says:

    试下哈~~

  18. willin says:

    成功了! :)

    1. zwwooooo says:

      我看把你的代码直接调用看能否把"檢查重覆評論" 和 "評論太快" 的功能完善一下

  19. willin says:

    有問題, 你這篇留言內容裏有兩個 wp_list_comments 在干擾, 留言後那邊也出現了.....

    1. zwwooooo says:

      哪边???

    2. zwwooooo says:

      搞定了,我用的是简单的直接弹出个对话框,太复杂不知怎么搞 :mrgreen:

      1. willin says:

        我是說你在6/24那篇留言有php代碼...

  20. willin says:

    真搞定了! 厲害!

发表评论

昵称 *

网址

B em del U Link Code Quote