一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

WordPress ajax评论回复功能实现方法

时间:2014-03-27 编辑:简简单单 来源:一聚教程网


第一,将comments-ajax.js 及 comments-ajax.php 放在你所使用主题的文件夹内;

comments-ajax.js

 代码如下 复制代码

var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
 var js_url = document.getElementsByTagName('script')[i].src,
   got = js_url.indexOf('comments-ajax.js'); i++ ;
}
var edit_mode = '1', // 再??模式 ( '1'=?; '0'=不? )
  ajax_php_url = js_url.replace('-ajax.js','-ajax.php'),
  wp_url = js_url.substr(0, js_url.indexOf('wp-content')),
  pic_sb = wp_url + 'wp-admin/images/wpspin_dark.gif', // 提交 icon
  pic_no = wp_url + 'wp-admin/images/no.png',      // ?? icon
  pic_ys = wp_url + 'wp-admin/images/yes.png',     // 成功 icon
  txt1 = '

正在提交, ?稍候...
',
  txt2 = '
#
',
  txt3 = '"> 提交成功',
  edt1 = ', 刷新页面之前可以   edt2 = ')'>再编辑',
  cancel_edit = '取消编辑',
  edit, num = 1, comm_array=[]; comm_array.push('');

jQuery(document).ready(function($) {
  $comments = $('#comments-title'); // ???档 ID
  $cancel = $('#cancel-comment-reply-link'); cancel_text = $cancel.text();
  $submit = $('#commentform #submit'); $submit.attr('disabled', false);
  $('#comment').after( txt1 + txt2 ); $('#loading').hide(); $('#error').hide();
  $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');

/** submit */
$('#commentform').submit(function() {
  $('#loading').slideDown();
  $submit.attr('disabled', true).fadeTo('slow', 0.5);
  if ( edit ) $('#comment').after('');

/** Ajax */
 $.ajax( {
  url: ajax_php_url,
  data: $(this).serialize(),
  type: $(this).attr('method'),

  error: function(request) {
   $('#loading').slideUp();
   $('#error').slideDown().html(' ' + request.responseText);
   setTimeout(function() {$submit.attr('disabled', false).fadeTo('slow', 1); $('#error').slideUp();}, 3000);
   },

  success: function(data) {
   $('#loading').hide();
   comm_array.push($('#comment').val());
   $('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;

// comments
  if ( ! edit && $comments.length ) {
   n = parseInt($comments.text().match(/d+/));
   $comments.text($comments.text().replace( n, n + 1 ));
  }

// show comment
  new_htm = '" id="new_comm_' + num + '">   new_htm = ( parent == '0' ) ? ('n

    ');

      ok_htm = 'n   }
      ok_htm += '
    n';

      $('#respond').before(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

    /** comment-reply.dev.js */
    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('comment').value = comm_array[num],
       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;
       return false;
      };

      try { t.I('comment').focus(); }
      catch(e) {}

      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;
      }
    }

    });// end jQ

comments-ajax.php

 代码如下 复制代码

/**
 * WordPress ?戎们短自u??S Ajax comments >> WordPress-jQuery-Ajax-Comments v1.3 by Willin Kan.
 * www.111com.net
 * ?明: ???文件是由 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 位於主??料?A,所以位置已不同

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.')); // ? exit 改?殄e?提示
}

// 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.')); // ? wp_die 改?殄e?提示
} elseif ( 'trash' == $status ) {
 do_action('comment_on_trash', $comment_post_ID);
 err(__('Invalid comment status.')); // ? exit 改?殄e?提示
} elseif ( !$status_obj->public && !$status_obj->private ) {
 do_action('comment_on_draft', $comment_post_ID);
 err(__('Invalid comment status.')); // ? exit 改?殄e?提示
} elseif ( post_password_required($comment_post_ID) ) {
 do_action('comment_on_password_protected', $comment_post_ID);
 err(__('Password Protected')); // ? exit 改?殄e?提示
} 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.')); // ? wp_die 改?殄e?提示
}

$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).') ); // ? wp_die 改?殄e?提示
 elseif ( !is_email($comment_author_email))
  err( __('Error: please enter a valid email address.') ); // ? wp_die 改?殄e?提示
}

if ( '' == $comment_content )
 err( __('Error: please type a comment.') ); // ? wp_die 改?殄e?提示

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

// 增加: ?z查重覆??功能
$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’ve already said that!'));
}

// 增加: ?z查??太快功能
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.'));
 }
}

$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');

// 增加: ?z查??是否正被??, 更新或新建??
if ( $edit_id ){
$comment_id = $commentdata['comment_ID'] = $edit_id;
wp_update_comment( $commentdata );
} 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);
}

//以下是??式?? 不含 "回覆". 要用你模板的式? copy 覆?.
?>
 

  • id="li-comment-">
      

      

       ' ); ?>
       %s says:'), get_comment_author_link() ); ?>
      

      comment_approved == '0' ) : ?>
       
       

       
      

      

      

     

  • 第二,在主题文件夹中打开header.php,找到:

     代码如下 复制代码

    修改为:




    好了,就是这么简单。清除缓存,刷新。

    热门栏目