我正在创建一个事件插件,每个事件都有一个评论部分。我可以保存每个评论,但我现在的问题是,我被带到admin-ajax.php,它是空白的。当表单提交时,我想留在同一页面上,并加载结果。我明白,通过将表单操作设置为admin-ajax.php,它将最终出现在该页面上,但我已经尝试了不同的方法,我发现通过搜索与谷歌,这是唯一的方式,我已经能够让它保存到数据库。我的代码如下。
形式
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="comment_form">
<textarea name="comment" id="comment" class="commentbox" rows="5" cols="120" required></textarea><br />
<input type="hidden" name="eventid" id="eventid" value="<?php echo $id; ?>" />
<input type="hidden" name="userid" id="userid" value="<?php echo $userid; ?>" />
<input type="hidden" name="action" value="commentform">
<button class="commentbtn">Add Comment</button>
</form>
<div id="response"></div>
字符串
jQuery
<script>
jQuery(function($){
$('#commentform').submit(function(){
var commentform = $('#commentform');
$.ajax({
url:commentform.attr('action'),
data:commentform.serialize(), // form data
type:commentform.attr('method'), // POST
beforeSend:function(xhr){
commentform.find('button').text('Processing...');
},
success:function(data){
commentform.find('button').text('Add Comment');
$('#response').html(data); // insert data
}
});
return false;
});
});
</script>
型
PHP函数
add_action('wp_ajax_commentform', 'comment_submit');
add_action('wp_ajax_nopriv_commentform', 'comment_submit');
function comment_submit() {
global $wpdb;
$eventid = $_POST["eventid"];
$userid = $_POST["userid"];
$comment = $_POST["comment"];
date_default_timezone_set("America/New_York");
$date = date('Y-m-d H:i:s');
$inserttable = $wpdb->prefix . "event_comments";
$data = array(
'eventid' => $eventid,
'userid' => $userid,
'content' => $comment,
'datesaved' => $date,
);
$wpdb->insert($inserttable, $data);
die;
}
型
2条答案
按热度按时间qlvxas9a1#
抱歉,我不能发表评论。
阅读您的代码,您正在寻找的元素不存在:用commentform替换comment_form。
字符串
但是你的id属性是id="**comment_form”>
型
fdbelqdn2#
我想明白了。我忘了添加event.preventDefault();来阻止窗体加载。