WordPress中利用AJAX技术进行评论提交的实现示例

ppsurcao 2019-12-15

ä¸ç´å¯¹ WordPress ç Ajax 交äºç ç©¶æå´è¶£ï¼ä¹ä¸ç´å¾å³æ³¨äºè¿æ¹é¢çææ¯ï¼è°å° WordPress Ajax å°±ä¸å¾ä¸è°å°è¯è®º Ajaxæ交ï¼ä½ä¸ºä¸ä¸ªå客ã论åè¯è®ºç Ajax æ交ä¸ä»å¯ä»¥æ¹åç¨æ·ä½éªï¼è¿å¯ä»¥å¤§å¹ç¼©åæå¡å¨å¼æ¯ï¼æ¯ç«è¾åºåæ¡è¯è®ºå容æ¯éæ°ç»ç»è¾åºä¸ä¸ªé¡µé¢è¦ç®åçå¤ã è½è¯´ç°å¨è®¿é®éä¸ç´æ¯è¾ä½ï¼ä¸å­å¨æå¡å¨ååçé®é¢ï¼ä½ä¸å注éç¨æ·ä½éªçæï¼å½ç¶ä¸è½æ¾å¼è¿ä¹ä¸ä¸ªæåç¨æ·ä½éªçæºä¼ãä»å¤©æ½äºä¸ä¸åç空ï¼æè¿ä¸ªä¸»é¢ç Ajax è¯è®ºæ交åæ­¥å®æäºã

ç´æ¥å¼é¨è§å±±ï¼ç´æ¥ä¸ä»£ç ï¼ï¼åçåæè·¯å¨æåï¼
æ ¹æ®èªå·±ä¸»é¢ä¸åç»æï¼ä»¥ä¸ä»£ç è¯·èªè¡è°æ´ã

WordPress Ajax æ交è¯è®º PHP 代ç 
å¨ä¸»é¢ function.php æ件中å å¥å¦ä¸é¨åã

//以ä¸å¤§é¨å代ç åºèª yinheli ç»ç±è¯¥é¨å代ç ï¼æé¤é¨åé误ãä¼åç²¾ç®å¾åºä»¥ä¸ä»£ç ã
//yinheliå客ä¸åäºï¼æ以è¿éå°±ä¸ç»é¾æ¥äºã
//Edited by XiangZi DEC.17TH 2011
function fail($s) {//èæé误头é¨å
  header('HTTP/1.0 500 Internal Server Error');
  echo $s;
  exit;
}
function ajax_post_comment_slow (){
 fail('ç¨ä¸ç¨è¯´è¿ä¹å¿«ï¼æ³å¥½äºå说ï¼');
}
//è¯è®ºå¤ªå¿«è¾åºä»£ç ã
add_filter('comment_flood_trigger','ajax_post_comment_slow', 0);
//æä¸ä¸ªè¯è®ºå¤ªå¿«ï¼è¿åå容çé©å­
function ajax_comment(){
// Ajax php ååºé¨å代ç 
if($_POST['action'] == 'ajax_comment') {
  global $wpdb, $db_check;
    // Check DB
    if(!$wpdb->dbh) {
      echo('Our database has issues. Try again later.');
  die();
    } 
nocache_headers();
$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) ) {
//è¿ä¸å¥å¤æ­è²ä¼¼æç wp æºä»£ç  ã详è§ï¼include/comment.php
  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('Oopps,åå­[Name]æé®ç®±[email]ä¸å¯¹ã');
  elseif ( !is_email($comment_author_email))
    fail('Oopps,é®ç®±å°å[Email]ä¸å¯¹ã');
}
if ( '' == $comment_content )
  fail('æ¯ä¸æ¯åºè¯¥åç¹ä»ä¹åæ交ï¼');
// 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('è¯è®ºéå¤äº!ææ¨æ!');
}
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID');
if( !$user->ID ){
 $result_set = $wpdb->get_results("SELECT display_name, user_email FROM $wpdb->users WHERE display_name = '" . $comment_author . "' OR user_email = '" . $comment_author_email . "'");
 if ($result_set) {
 if ($result_set[0]->display_name == $comment_author){
 fail('å主你ä¹æ¢ååï¼');
 } else {
 fail('å主你ä¹æ¢ååï¼');
 }
 }
}
$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'));
 xz_comment($comment, null);//è¿æ¯æçè°ç¨è¯è®ºå½æ°ï¼æ¢æä½ çå½æ°åã
 die();
}
}
add_action('init', 'ajax_comment');

Javascript 中代ç 
注æï¼ä»¥ä¸ä»£ç éè¦ Jquery æ¡æ¶æ¯æ´ã
javascript onload 代ç ä¸­å å¥ä»¥ä¸é¨åã

if (jQuery('#commentform').length) {
  jQuery('#commentform').submit(function(){  
// æªè·æ交å¨ä½
//ID为 commentform ç表åæ交æ¶åççå½æ°ï¼ä¹å°±æ¯æ´ä¸ªçè¨è¾å¥æ¡ form çIDã
 var ajaxCommentsURL = window.location.href;
    jQuery.ajax({
      url: ajaxCommentsURL,
      data: jQuery('#commentform').serialize()+'&action=ajax_comment',  
      type: 'POST',
      beforeSend: function() {
        jQuery('#commenterror').hide();
        jQuery('#commentload').fadeIn();
      },
      error: function(request) {  //åçé误æ¶
        jQuery('#commenterror').html(request.responseText);
        jQuery('#commentload').hide();  //éè submit
        jQuery('#commenterror').fadeIn(); //æ¾ç¤º error 
      },
      success: function(data) {
        jQuery('textarea').each(function(){
          this.value='';
        });
        jQuery('#commenterror').fadeOut();
        if(jQuery(".commentlist li.comment").first().length != 0){jQuery(".commentlist li.comment").first().before(data)}  
        else {jQuery("ol.commentlist").append(data)}
        jQuery(".commentlist li.comment").first().hide(0,function(){$(this).slideDown(1000)});
        jQuery('#cmt-submit').attr('disabled', true).css({"background-color":"#6C6C6C","color":"#E0E0E0"});
        jQuery('#commentload').fadeOut(1600);
 setTimeout(function() {
        jQuery('#cmt-submit').removeAttr('disabled').css({"background-color":"#0086C5","color":"#FFFFFF"});
        },3000); 
      }
    });
    return false;
  } );
}

注ï¼ä»£ç ä»ææ¹è¿éæ±ï¼å ä¸ºæ²¡ææ¶é´ï¼æ以就没æåè¿åã

CSS 代ç 
css éæé¨åæ·»å ã

#commentload,#commenterror{
 display: none;
 margin: 5px 0 0 0;
 color:#D29A04;
 float: left;
 font-size:16px;
 padding:0 0 0 20px;
}
#commentload{
 background: url("img/loading.gif") no-repeat bottom left ;
}
#commenterror{
 background: url("img/error.png") no-repeat bottom left ;
}

åçãæè·¯
åçï¼
Javascript æ交æ°æ®
phpååºå¹¶è¾åºç»æ
Javascript å¾å°ç»æ并æ¾ç¤º
æè·¯ï¼
ç¹å»æ交æé®åï¼Javascript æªè·æ交å¨ä½
æªè·æ交çå项æ°æ®ï¼NameãEmailãWebãComment-textï¼
å©ç¨ Javascript Jquery 模ææµè§å¨æ交POSTï¼NameãEmailãWebãComment-textï¼è¯·æ±ä¹WordPress
Function.php æ件中æé ä¸ä¸ªæ¥å请æ±çå½æ°ï¼å³æ¬å中ajax_commentå½æ°
å¦æ请æ±æ é误ï¼è¾åºæ­£ç¡®ç»æ
å¦æ请æ±æé误ï¼è¾åºé误ç»æ
Javascript è·å¾æ­£ç¡®ç»æï¼å¨ææ·»å å°è¯è®ºå表中
Javascript è·å¾é误ç»æï¼å¨ææ·»å å°æ交æ示æ 
æ¹è¿
æ ·å¼æ¹é¢ï¼æç¡®å®æ²¡ä»ä¹ç¾æï¼æ以正å¨å­¦ä¹ ä¸­ã
æ交æé®å¨ç¹å»è³è·å¾è¿åç»æå3ç§çæ¶é´éåºè¯¥é½æ¯åç°å¤±æç¶æï¼è¿ä¸ç¹ä¹åå ä¸ºå¨æ¬æºæµè¯ï¼æ交ç¬é´å®æ没æ注æå°ï¼è¿ç¨æµè¯çæ¶ååç°äºï¼ä½è¦æ¹çè¯è¿è¦è¿è¡æµè¯ï¼æ¶é´å¤ªç´§å°±ä¸æ¹äºï¼ææºä¼åæ¹è¿ä¸ä¸ã

æ»ç»
å ä¸º WordPress 主é¢ä¸­è¯è®ºæ ·å¼çèªç±æ§ãå¤æ ·æ§ï¼æ以è²ä¼¼è³ä»ä¸ç´æ²¡æä¸æ¬¾éç¨æ§çAJAX è¯è®ºæ件ï¼
ä¸äºé«æä¹åªè½å¨ä¼åèªå·±å客ä¹ä½ï¼ææè·¯åé¨åéç¨æ ¸å¿ä»£ç åä¸ä¸å¬å¸ï¼
æ以æ³è¦å®ç°ä¸äºç«é·çåè½è¦ä¸æé«äººå¸®ä½ ï¼
è¦ä¸ä½ å°±åªè½å¥½å¥½å­¦ä»£ç ï¼æå¾æä¸æ¥è½å¤å积èåäºã
ææ请èªè¡æ交è¯è®ºéªè¯ã

相关推荐

mmywcoco / 0评论 2020-06-06