WordPress中利用AJAX技术进行评论提交的实现示例
ä¸ç´å¯¹ 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 è¯è®ºæä»¶ï¼
ä¸äºé«æä¹åªè½å¨ä¼åèªå·±å客ä¹ä½ï¼ææè·¯åé¨åéç¨æ ¸å¿ä»£ç åä¸ä¸å¬å¸ï¼
æä»¥æ³è¦å®ç°ä¸äºç«é·çåè½è¦ä¸æé«äººå¸®ä½ ï¼
è¦ä¸ä½ å°±åªè½å¥½å¥½å¦ä»£ç ï¼æå¾æä¸æ¥è½å¤å积èåäºã
ææè¯·èªè¡æäº¤è¯è®ºéªè¯ã
相关推荐
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo