Axiu Blog
想用的AJAX评论效果就被我发现了。 其实这个集成在 wp-threat-comment 里面,以前用嵌套评论的时候启用过一段时间,感觉还不错,至少不用刷新页面看留言效果。不过由于找不到嵌套评论的合适效果,所以决定放弃它了。但是对于AJAX评论还是耿耿于怀。 这个方法详细内容见 [使用 jQuery 实现 wordpress 的 Ajax 留言](htt
忙了3个多小时完成了AJAX评论的添加,效果见本博留言部分~ 首先感谢已经许久没有更新的 [Xiaorsz](http://www.xiaorsz.com/) 同学,虽然很久没有更新了,但是就是翻翻就日志,还是能有很大收获的,这不,我一直想用的AJAX评论效果就被我发现了。 其实这个集成在 wp-threat-comment 里面,以前用嵌套评论的时候启用过一段时间,感觉还不错,至少不用刷新页
忙了3个多小时完成了AJAX评论的添加,效果见本博留言部分~ 首先感谢已经许久没有更新的 [Xiaorsz](http://www.xiaorsz.com/) 同学,虽然很久没有更新了,但是就是翻翻就日志,还是能有很大收获的,这不,我一直想用的AJAX评论效果就被我发现了。 其实这个集成在 wp-threat-comment 里面,以前用嵌套评论的时候启用过一段时间,感觉还不错,至少不用刷新页
Vicuna 主题添加AJAX评论
Max

忙了3个多小时完成了AJAX评论的添加,效果见本博留言部分~

首先感谢已经许久没有更新的 Xiaorsz 同学,虽然很久没有更新了,但是就是翻翻就日志,还是能有很大收获的,这不,我一直想用的AJAX评论效果就被我发现了。

其实这个集成在 wp-threat-comment 里面,以前用嵌套评论的时候启用过一段时间,感觉还不错,至少不用刷新页面看留言效果。不过由于找不到嵌套评论的合适效果,所以决定放弃它了。但是对于AJAX评论还是耿耿于怀。

这个方法详细内容见 使用 jQuery 实现 wordpress 的 Ajax 留言 ,首先对他的辛勤劳动再次表示感谢,内容也基本取自这篇文章。

首先推荐使用 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js ,好处就是当别人访问过同样使用这JS的时候,再次访问你的站点不用再次载入这个文件,这个文件几十K的,载入的话很耗费时间的,这自然会影响首页载入速度。

vicuna 的主题comments是需要修改的。因为他的几个关键部分不带有ID,所以如果用AJAX效果的话找不到。添加的部分主要有以下:

1、查找<span>,添加id=”commentnum”.

2、查找<dl>,添加id=”commentlist”.

**第一,编写comments-ajax.php文件。**注意该部分最后的<dt id=”comment-<?php echo $comment->comment\_ID; ?>”>后的部分用自己主题的 id=”comment-<……来代替。

<?php if ($\_SERVER\["REQUEST\_METHOD"\] != "POST") { header('Allow: POST'); header("HTTP/1.1 405 Method Not Allowed"); header("Content-type: text/plain"); exit; } $db\_check = true; function kill\_data() { return ''; } function check\_db() { global $wpdb, $db\_check; if($db\_check) { // Check DB if(!$wpdb->dbh) { echo('Our database has issues. Try again later.'); } else { echo('We\\'re currently having site problems. Try again later.'); } die(); } } ob\_start('kill\_data'); register\_shutdown\_function('check\_db'); require\_once('../../../wp-config.php'); $db\_check = false; ob\_end\_clean(); nocache\_headers(); function fail($s) { header('HTTP/1.0 500 Internal Server Error'); echo $s; exit; } $comment\_post\_ID = (int) $\_POST\['comment\_post\_ID'\]; $status = $wpdb->get\_row("SELECT post\_status, comment\_status FROM $wpdb->posts WHERE ID = '$comment\_post\_ID'"); if ( empty($status->comment\_status) ) { do\_action('comment\_id\_not\_found', $comment\_post\_ID); fail('The post you are trying to comment on does not currently exist in the database.'); } elseif ( 'closed' ==  $status->comment\_status ) { do\_action('comment\_closed', $comment\_post\_ID); fail('Sorry, comments are closed for this item.'); } elseif ( in\_array($status->post\_status, array('draft', 'pending') ) ) { do\_action('comment\_on\_draft', $comment\_post\_ID); fail('The post you are trying to comment on has not been published.'); } $comment\_author       = trim(strip\_tags($\_POST\['author'\])); $comment\_author\_email = trim($\_POST\['email'\]); $comment\_author\_url   = trim($\_POST\['url'\]); $comment\_content      = trim($\_POST\['comment'\]); // If the user is logged in $user = wp\_get\_current\_user(); if ( $user->ID ) { $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') ) fail('请先填写个人信息再发表评论,谢谢.'); } $comment\_type = ''; if ( get\_option('require\_name\_email') && !$user->ID ) { if ( 6> strlen($comment\_author\_email) || '' == $comment\_author ) fail('Error: 请填写必要的信息 (name, email).'); elseif ( !is\_email($comment\_author\_email)) fail('请输入有效的Email地址.'); } if ( '' == $comment\_content ) fail('Error: please type a comment.'); // Simple duplicate check $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) ) { fail('Duplicate comment detected; 你好像已经说过相同的话了!'); } $commentdata = compact('comment\_post\_ID', 'comment\_author', 'comment\_author\_email', 'comment\_author\_url', 'comment\_content', 'comment\_type', 'user\_ID'); $comment\_id = wp\_new\_comment( $commentdata ); $comment = get\_comment($comment\_id); if ( !$user->ID ) { setcookie('comment\_author\_' . COOKIEHASH, $comment->comment\_author, time() + 30000000, COOKIEPATH, COOKIE\_DOMAIN); setcookie('comment\_author\_email\_' . COOKIEHASH, $comment->comment\_author\_email, time() + 30000000, COOKIEPATH, COOKIE\_DOMAIN); setcookie('comment\_author\_url\_' . COOKIEHASH, clean\_url($comment->comment\_author\_url), time() + 30000000, COOKIEPATH, COOKIE\_DOMAIN); } @header('Content-type: ' . get\_option('html\_type') . '; charset=' . get\_option('blog\_charset')); $comment->comment\_type = 'comment'; $comment\_index = $\_POST\['comment\_count'\] + 1; ?> <dt id="comment-<?php echo $comment->comment\_ID; ?>"> //添加自己主题评论部分的代码</dt>

**第二,comments.js的实现。**该部分当中的commentlist就是我们添加的log部分的ID。如果需要的话可以把这部分整合到自己的JS里。

if ($('#commentform').length) { $('#commentform').submit(function(){ jQuery.ajax({ url: 'comments-ajax.php', // !这里要改为 comments-ajax.php 文件的位置 data: $('#commentform').serialize(), // 从表单中获取数据 type: 'POST', // 设置请求类型为 ‘POST’,默认为 ‘GET’ beforeSend: function() { $('#commenterror').hide(); $('#commentload').show(); }, error: function(request) { $('#commentload').hide(); $('#commenterror').show().html(request.responseText); }, success: function(data) { $('textarea').each(function(){ this.value=''; }); $('#commenterror').hide().html(); $('#comments').html(parseInt($('#comments').html()) + 1); if (!$('#commentlist').length) { $('#pinglist').before('<ul id="commentlist"></ul>'); } $('#commentlist').append(data); // 追加留言数据 $('#commentform :input').attr('disabled', true); $('#commentformbox').fadeOut(1000); $('#commentload').hide(); setTimeout(function() { // 提交留言 15 秒后方可再次提交新留言 $('#commentform :input').removeAttr('disabled'); $('#commentformbox').fadeIn(1000); }, 15000); } }); return false; }); }

之后是评论楼层的显示,如果不想刷新后看到的话可以在success: function(data)函数体内部添加

$(‘#commentnum’).text(parseInt(jQuery(‘#commentnum’).html()) + 1);
$(‘.ajaxcomments’).text($(‘#commentnum’).text()).removeAttr(“class”);

记住commentnum是自己定义的楼层显示部分id。

第三,在footer或者header部分加载jQuery 框架和以上的JS。完成。

PS:关于里面AJAX的等待条,其实有网站可以在线生成的,在这里~~http://www.ajaxload.info/。用起来很方便~喜欢的同学可以自己做一个~

Comments