现在说这个好像有些过时了,当然这里说的还是Willin Kan版本的,本站是用更简单的方式,这里只是记录一个Willin Kan版本的方法。并且添加了一些新功能,这个在功能上恐怕是最全面的了。

首先下载两个文件comments-ajax.jscomments-ajax.php 文件名不要改,因为js里面会抓取的。把他们放到主题根目录下然后引用即可,需要jQuery的支持。
你可以用wp_enqueue_script()来引用这个js,也可以自己添加:

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/comments-ajax.js"></script>

引用完毕之后,为了确保你修改相关的选择器和评论列表结构后能出效果,在此前还需要进行一些准备工作:
1、确保下载的js和php文件都放在主题根目录下(当然你看懂代码的话可以放在别的地方,然后修改相对路径)
2、在comments.php里面的评论表单form标签之前添加了回复按钮标签

<div class="cancel-comment-reply">
   <small><?php cancel_comment_reply_link(); ?></small>
</div>

3、在comments.php里面的评论表单form标签之内添加了评论id域函数(一般在form标签里面的最后面)

<?php comment_id_fields(); ?>

准备就绪之后就可以参照js和php中的注释进行选择器的修改(由INLOJV注释,带×××符号的必须作修改)

comments-ajax.js

/**
 * WordPress jQuery-Ajax-Comments v1.3 by Willin Kan.
 * URI: http://kan.willin.org/?p=1271
 */
jQuery(document).ready(function($) {
    ajaxComt();
 });
function ajaxComt(){
    var i = 0, got = -1, len = document.getElementsByTagName('script').length;// script标签的数目
    while (i <= len && got == -1) { // 这个循环用来抓取patience.js所在文件夹的路径 ,这个patience.js是放在主题js文件夹下的!下面获取ajax_php的相对路径就要注意!
        var js_url = document.getElementsByTagName('script')[i].src,
        got = js_url.indexOf('patience.js');  // ××××××××××××××××××× 改为本js的名称
        i++
    }
    var edit_mode = '1', // 再編輯模式 ( '1'=開; '0'=不開 )
    ajax_php_url = js_url.replace('patience.js', '../comments-ajax.php'), // ××××××对应位置改为ajax php的路径 ../表示当前文件的上一级
    wp_url = js_url.substr(0, js_url.indexOf('wp-content')), // 主页地址
    pic_sb = wp_url + 'wp-admin/images/loading.gif', // 提交 icon
    pic_no = wp_url + 'wp-admin/images/no.png',      // 錯誤 icon
    pic_ys = wp_url + 'wp-admin/images/yes.png',     // 成功 icon
    txt1 = '<div id="loading"><img src="' + pic_sb + '" style="vertical-align:middle;" alt=""/> 正在提交, 请稍后...</div>',
    txt2 = '<div id="error">#</div>',
    txt3 = '"><p id="edit"><img src="' + pic_ys + '" style="vertical-align:middle;" alt=""/> 提交成功',
    edt1 = ', 刷新页面之前可以<a rel="nofollow" class="comment-reply-link" href="#edit" onclick=\'return addComment.moveForm("',
    edt2 = ')\'>再编辑</a>',
    cancel_edit = '取消编辑',
    edit, 
    num = 1, 
    comm_array=[]; 
    comm_array.push('');
    $comments = $('#comments-title'); // 评论计数的ID
    $cancel = $('#cancel-comment-reply-link'); 
    cancel_text = $cancel.text();
    $submit = $('#comment_form #submit'); // ×××××××××××××××××××××××××××××× 提交按钮的id或class
    $submit.attr('disabled', false);
    $('#c_tarea').after( txt1 + txt2 );  // ×××××××××××××××××××××××××××××××××× 这是评论表单textarea的id或class
    $('#loading').hide(); 
    $('#error').hide();
    $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');

    /** 评论提交 */
    $('#comment_form').submit(function() { // ×××××××××× form表单的id,如果用on方法动态绑定,那么就不会受页面ajax影响
        $('#loading').slideDown();
        $submit.attr('disabled', true).fadeTo('slow', 0.5);
        if ( edit ) $('#c_tarea').after('<input type="text" name="edit_id" id="edit_id" value="' + edit + '" style="display:none;" />'); //×××××××× 在textarea标签之后插入
        $.ajax( {
            url: ajax_php_url, // 这是ajax.php的路径
            data: $(this).serialize(),
            type: $(this).attr('method'),
            // 错误提示
            error: function(request) {
                $('#loading').slideUp();
                $('#error').slideDown().html('<img src="' + pic_no + '" style="vertical-align:middle;" alt=""/> ' + request.responseText);
                setTimeout(function() {$submit.attr('disabled', false).fadeTo('slow', 1); $('#error').slideUp();}, 3000);
            },
            success: function(data) {
                $('#loading').hide();
                comm_array.push($('#c_tarea').val()); // ×××××××××××××××××××× 这个c-textarea为textarea的id
                $('textarea').each(function() {this.value = ''});
                var t = addComment, cancel = t.I('cancel-comment-reply-link'), temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId), post = t.I('comment_post_ID').value, parent = t.I('comment_parent').value;
                // 增加评论数
                if ( ! edit && $comments.length ) {
                    n = parseInt($comments.text().match(/\d+/));
                    $comments.text($comments.text().replace( n, n + 1 ));
                }
                // 评论显示
                new_htm = '" id="new_comm_' + num + '"></';
                new_htm = ( parent == '0' ) ? ('\n<ol style="clear:both;" class="comment-list' + new_htm + 'ol>') : ('\n<ul class="children' + new_htm + 'ul>'); // ×××××××评论列表的class
                ok_htm = '\n<span id="success_' + num + txt3;
                if ( edit_mode == '1' ) {
                    div_ = (document.body.innerHTML.indexOf('div-comment-') == -1) ? '' : ((document.body.innerHTML.indexOf('li-comment-') == -1) ? 'div-' : '');
                    ok_htm = ok_htm.concat(edt1, div_, 'comment-', parent, '", "', parent, '", "respond", "', post, '", ', num, edt2);
                }
                ok_htm += '</p></span><span></span>\n';
                if($('#comments .comment-list').length>0){ // ××××××××××××××××××××非嵌套评论时,新评论显示插入的位置(按自己的喜好修改显示位置)
                    $('#comments .comment-list').before(new_htm);
                } else{
                    $('#respond').after(new_htm);
                }    
                $('#new_comm_' + num).hide().append(data);
                $('#new_comm_' + num + ' li').append(ok_htm);
                $('#new_comm_' + num).fadeIn(4000);

                $body.animate( { scrollTop: $('#new_comm_' + num).offset().top - 200}, 900);
                countdown(); num++ ; edit = ''; $('*').remove('#edit_id');
                cancel.style.display = 'none';
                cancel.onclick = null;
                t.I('comment_parent').value = '0';
                if ( temp && respond ) {
                    temp.parentNode.insertBefore(respond, temp);
                    temp.parentNode.removeChild(temp)
                }
            }
        }); // end Ajax
      return false;
    }); // end submit

    /** 移动回复表单 */
    addComment = {
        moveForm : function(commId, parentId, respondId, postId, num) {
            var t = this, div, comm = t.I(commId), respond = t.I(respondId), cancel = t.I('cancel-comment-reply-link'), parent = t.I('comment_parent'), post = t.I('comment_post_ID');
            if ( edit ) exit_prev_edit();
            num ? (
                t.I('c_tarea').value = comm_array[num],// ××××××××××××××××××××这个为textarea的id
                edit = t.I('new_comm_' + num).innerHTML.match(/(comment-)(\d+)/)[2],
                $new_sucs = $('#success_' + num ), $new_sucs.hide(),
                $new_comm = $('#new_comm_' + num ), $new_comm.hide(),
                $cancel.text(cancel_edit)
            ) : $cancel.text(cancel_text);

            t.respondId = respondId;
            postId = postId || false;

            if ( !t.I('wp-temp-form-div') ) {
                div = document.createElement('div');
                div.id = 'wp-temp-form-div';
                div.style.display = 'none';
                respond.parentNode.insertBefore(div, respond);
            }

            !comm ? ( 
                temp = t.I('wp-temp-form-div'),
                t.I('comment_parent').value = '0',
                temp.parentNode.insertBefore(respond, temp),
                temp.parentNode.removeChild(temp)
            ) : comm.parentNode.insertBefore(respond, comm.nextSibling);
            $body.animate( { scrollTop: $('#respond').offset().top - 180 }, 400);
            if ( post && postId ) post.value = postId;
            parent.value = parentId;
            cancel.style.display = '';
            // 取消回复
            cancel.onclick = function() {
                if ( edit ) exit_prev_edit();
                var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId);

                t.I('comment_parent').value = '0';
                if ( temp && respond ) {
                    temp.parentNode.insertBefore(respond, temp);
                    temp.parentNode.removeChild(temp);
                }
                this.style.display = 'none';
                this.onclick = null;
                $('textarea').val('');
                return false;
            };

            /*try { t.I('comment').focus(); }
            catch(e) {}*/
            $('#c_tarea').focusEnd(); // ××××××××××××××××××××这个为textarea的id

            return false;
        },

        I : function(e) {
            return document.getElementById(e);
        }
    }; // end addComment

    function exit_prev_edit() {
            $new_comm.show(); $new_sucs.show();
            $('textarea').each(function() {this.value = ''});
            edit = '';
    }

    /** 重编辑等待时间 防止快速提交 */
    var wait = 15, submit_val = $submit.val();
    function countdown() {
        if ( wait > 0 ) {
            $submit.val(wait); wait--; setTimeout(countdown, 1000);
        } else {
            $submit.val(submit_val).attr('disabled', false).fadeTo('slow', 1);
            wait = 15;
      }
    }

    $.fn.setCursorPosition = function(position){
        if(this.lengh == 0) return this;
        return $(this).setSelection(position, position);
    }

    $.fn.setSelection = function(selectionStart, selectionEnd) {
        if(this.lengh == 0) return this;
        input = this[0];

        if (input.createTextRange) {
            var range = input.createTextRange();
            range.collapse(true);
            range.moveEnd('character', selectionEnd);
            range.moveStart('character', selectionStart);
            range.select();
        } else if (input.setSelectionRange) {
            input.focus();
            input.setSelectionRange(selectionStart, selectionEnd);
        }

        return this;
    }

    $.fn.focusEnd = function(){
        this.setCursorPosition(this.val().length);
    }
}

comments-ajax.php

<?php
/**
 * WordPress 內置嵌套評論專用 Ajax comments >> WordPress-jQuery-Ajax-Comments v1.3 by Willin Kan.
 *
 * 說明: 這個文件是由 WP 3.0 根目錄的 wp-comment-post.php 修改的, 修改的地方有注解. 當 WP 升級, 請注意可能有所不同.
 */

if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) {
    header('Allow: POST');
    header('HTTP/1.1 405 Method Not Allowed');
    header('Content-Type: text/plain');
    exit;
}

/** Sets up the WordPress Environment. */
require( dirname(__FILE__) . '/../../../wp-load.php' ); // 此 comments-ajax.php 位於主題資料夾,所以位置已不同

nocache_headers();

$comment_post_ID = isset($_POST['comment_post_ID']) ? (int) $_POST['comment_post_ID'] : 0;

$post = get_post($comment_post_ID);

if ( empty($post->comment_status) ) {
    do_action('comment_id_not_found', $comment_post_ID);
    err(__( 'Invalid comment status.' , 'inlojv' )); // 將 exit 改為錯誤提示
}

// get_post_status() will get the parent status for attachments.
$status = get_post_status($post);

$status_obj = get_post_status_object($status);

if ( !comments_open($comment_post_ID) ) {
    do_action('comment_closed', $comment_post_ID);
    err(__('Sorry, comments are closed for this item.','inlojv')); // 將 wp_die 改為錯誤提示
} elseif ( 'trash' == $status ) {
    do_action('comment_on_trash', $comment_post_ID);
    err(__('Invalid comment status.','inlojv')); // 將 exit 改為錯誤提示
} elseif ( !$status_obj->public && !$status_obj->private ) {
    do_action('comment_on_draft', $comment_post_ID);
    err(__('Invalid comment status.','inlojv')); // 將 exit 改為錯誤提示
} elseif ( post_password_required($comment_post_ID) ) {
    do_action('comment_on_password_protected', $comment_post_ID);
    err(__('Password Protected','inlojv')); // 將 exit 改為錯誤提示
} else {
    do_action('pre_comment_on_post', $comment_post_ID);
}

$comment_author       = ( isset($_POST['author']) )  ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
$comment_author_url   = ( isset($_POST['url']) )     ? trim($_POST['url']) : null;
$comment_content      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
$edit_id              = ( isset($_POST['edit_id']) ) ? $_POST['edit_id'] : null; // 提取 edit_id

// If the user is logged in
$user = wp_get_current_user();
if ( $user->ID ) {
    if ( empty( $user->display_name ) )
        $user->display_name=$user->user_login;
    $comment_author       = $wpdb->escape($user->display_name);
    $comment_author_email = $wpdb->escape($user->user_email);
    $comment_author_url   = $wpdb->escape($user->user_url);
    if ( current_user_can('unfiltered_html') ) {
        if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) {
            kses_remove_filters(); // start with a clean slate
            kses_init_filters(); // set up the filters
        }
    }
} else {
    if ( get_option('comment_registration') || 'private' == $status )
        err(__('Sorry, you must be logged in to post a comment.','inlojv')); // 將 wp_die 改為錯誤提示
}

$comment_type = '';

if ( get_option('require_name_email') && !$user->ID ) {
    if ( 6 > strlen($comment_author_email) || '' == $comment_author )
        err( __('Error: please fill the required fields (name, email).','inlojv') ); // 將 wp_die 改為錯誤提示
    elseif ( !is_email($comment_author_email))
        err( __('Error: please enter a valid email address.','inlojv') ); // 將 wp_die 改為錯誤提示
}

if ( '' == $comment_content )
    err( __('Error: please type a comment.','inlojv') ); // 將 wp_die 改為錯誤提示

// 增加: 錯誤提示功能
function err($ErrMsg) {
    header('HTTP/1.1 405 Method Not Allowed');
    echo $ErrMsg;
    exit;
}

// 增加: 檢查重覆評論功能
$dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND ( comment_author = '$comment_author' ";
if ( $comment_author_email ) $dupe .= "OR comment_author_email = '$comment_author_email' ";
$dupe .= ") AND comment_content = '$comment_content' LIMIT 1";
if ( $wpdb->get_var($dupe) ) {
    err(__('Duplicate comment detected; it looks as though you&#8217;ve already said that!','inlojv'));
}

// 增加: 檢查評論太快功能
if ( $lasttime = $wpdb->get_var( $wpdb->prepare("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author = %s ORDER BY comment_date DESC LIMIT 1", $comment_author) ) ) { 
$time_lastcomment = mysql2date('U', $lasttime, false);
$time_newcomment  = mysql2date('U', current_time('mysql', 1), false);
$flood_die = apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment);
if ( $flood_die ) {
    err(__('You are posting comments too quickly.  Slow down.','inlojv'));
    }
}

$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;

$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');

// 增加: 檢查評論是否正被編輯, 更新或新建評論    修改版,Kan的Ajax评论任意修改漏洞
function ihacklog_user_can_edit_comment($new_cmt_data,$comment_ID = 0){
    if(current_user_can('edit_comment', $comment_ID)){
        return true;
    }
    $comment = get_comment( $comment_ID );
    $old_timestamp = strtotime( $comment->comment_date );
    $new_timestamp = current_time('timestamp');
    $rs = $comment->comment_author_email === $new_cmt_data['comment_author_email'] && $comment->comment_author_IP === $_SERVER['REMOTE_ADDR'] && $new_timestamp - $old_timestamp < 1800;
    return $rs;
}

if( $edit_id ){
    $comment_id = $commentdata['comment_ID'] = $edit_id;
    if( ihacklog_user_can_edit_comment($commentdata,$comment_id) ){
        wp_update_comment( $commentdata );
    } else {
        err('You are not allowed to edit this comment!');
    }
} else {
    $comment_id = wp_new_comment( $commentdata );
}

$comment = get_comment($comment_id);
if ( !$user->ID ) {
    $comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000);
    setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
    setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
    setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
}

//$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;   //为评论的 class 属性准备的
$tmp_c = $comment;
while($tmp_c->comment_parent != 0){
$comment_depth++;
$tmp_c = get_comment($tmp_c->comment_parent);
}
?>
<?php
// 评论列表模板,用回调函数里面的列表函数替换,一般在functions.php里面找得到,
// 对应comments.php里面wp_list_comments('type=comment&callback=xxxxxx');内callback的函数内容
  $avatar = get_avatar ( $comment->comment_author_email, 55 );
  echo '<li '; comment_class(); echo ' id="comment-'.get_comment_ID().'">';

  //头像
  echo '<div class="cl-avatar">';
    echo    $avatar;
  echo '</div>';
  //评论主体
  echo '<div class="cl-main" id="div-comment-'.get_comment_ID().'">';    
    //信息
    echo '<div class="cl-meta">';
            if ($comment->comment_type == '') {
    $author_link = empty ( $comment->comment_author_url ) ? null : ' href="' . $comment->comment_author_url . '"';    
    $author = $comment->comment_author;
    $comment_ID = get_comment_ID();
        echo <<<EOF
        <span class="cl-author-{$comment_ID}"><a title="{$author}" rel="external nofollow" target="_blank" class="cl-author-url"{$author_link}>{$author}</a></span>        
EOF;
    }
        echo get_comment_time ( 'Y-n-j H:i' ); 
        if ($comment->comment_approved !== '0'){ 
            echo comment_reply_link( array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); 
        echo edit_comment_link(__('( 编辑 )'),' - ','');
      } 
    echo '</div>';
    //内容
    echo '<div class="cl-content" >';
    echo convert_smilies(get_comment_text());
    if ($comment->comment_approved == '0'){
      echo '<span class="cl-approved">(您的评论需要审核后才能显示!)</span><br />';
    }
    echo '</div>';    
  echo '</div>';
?>

下载地址