给 WordPress 启用 Ajax 评论(代码版)

其实谁不想自己的博客拥有又炫又实用的 AJAX 评论呢。找了很多插件版的,都不太好用,而且还拖慢了速度。用句万戈的话说:能用代码改的效果绝对不用插件。这个AJAX效果也是他极力推荐给我的。来自于 Willin 大师。

代码下载:
 下载 comments-ajax-1.29.zip v1.29 适用於 WP 2.8 ~ 3.0
 下载 comments-ajax-1.3.zip (v1.3 2010/5/20 更新) 用了新函数 get_post_status_object(), 只能在 WP 3.0 以上使用。

安装方法:
解压之后, 将 comments-ajax.js 及 comments-ajax.php 放在模板所在目录
在 header.php 找到

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

用下面几行取代:

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

因为 comments-ajax.js 已合併了 WP 的 comment-reply.js, 所以不必再叫用原來的 wp_enqueue_script( 'comment-reply' )
如果你的模板够标准, 这样就可以正常工作了

如果有任何運行不正常, 請繼續看以下注意事項:

 1. 安裝前, 請先確認 WordPress 內置嵌套評論已正常運作. 如果不是內置嵌套評論, 會出問題的.

 2. 各式模板設計不同, 請檢查 comments.php 是否夠標準, 儘量不修改模板, 只要對應修改本文件, 以免 css 亂套.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
◎標準模板是指:
   "評論數" id="comments" (WP 3.0 用的是 id="comments-title")
    例: <h3 id="comments"><?php comments_number( ...%條評論... </h3>
    已知有不少模板用的不是 "comments", 它的 "comments" 已用到別地方,
    如果評論提交後, 評論數位置出現很多源代碼, 通常是這問題, 要特別留意!
    ps. WP 3.0 用的是 id="comments-title", 新版我已將 "comments""comments-title",
     如果你要用以前的 "comments", 請在 comments-ajax.js 第 25 行更改.
   "評論列表" id="commentlist"
    例: <ol id="commentlist"> 注意是 ol 不是 ul.
   "表單" id="commentform"
    例: <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
   "評論框" id="respond" (是含 author, email, url, comment)
    例: <div id="respond" ... >
   "評論區" id="comment"
    例: <textarea name="comment" id="comment" ... >
   "提交" id="submit"
    例: <input ... id="submit" ... >
  ※以上所用的 id 標簽是 js 運作的重要關鍵! 請確認與模板對應無誤!

 3. 本程式主要提供 Ajax comments 功能, css 已儘量配合原模板輸出. 如果還有 css 需求, 請自行修改.

 4. 在 comments-ajax.php 最下方有評論格式, 若你的 functions.php 有 mytheme_comment(), 請對應覆蓋, 且拿掉 "回覆" 鏈接.

发现自己的模板就不是标准版的。。。修改了一下才搞定了~

/* 以下纯粹是给自己看的,自己的修改记录,大家可以无视 */

1
2
3
<?php if ( have_comments() ) : ?>
   <div id="comments">
   <h3><?php comments_number(__('No Responses' ,'DeepMix'), __('One Response' ,'DeepMix'),__('% Responses' ,'DeepMix'));?> <?php _e('to', 'DeepMix') ?> &#8220;<?php the_title(); ?>&#8221;</h3>

修改成了

1
2
   <div id="comments">
   <h3 id="number"><?php comments_number(__('No Responses' ,'DeepMix'), __('One Response' ,'DeepMix'),__('% Responses' ,'DeepMix'));?> <?php _e('to', 'DeepMix') ?> &#8220;<?php the_title(); ?>&#8221;</h3>