我正在尝试在wordpress插件中以简单的ajax形式插入新帖子。访客将使用此表单从前端创建帖子。
我的表单是这样的:
<script>
jQuery( document ).ready(function() {
jQuery('input[type=submit]').on('click', function() {
var ajaxurl = 'https://example.com/wp-admin/admin-ajax.php';
jQuery.ajax({
type: "POST",
data: jQuery('.event-form').serialize(),
url: ajaxurl,
success: function(result) {
console.log('data sent!');
console.log('sent to: ' + templateDir + loadUrl );
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR + " :: " + textStatus + " :: " + errorThrown);
}
});
});
});
</script>
<form id="msform" name="review_form" class="form-horizontal event-form" action="/create-event" method="POST" enctype="multipart/form-data">
<input type="text" name="title" placeholder="title">
<textarea rows="4" name="desc" placeholder="Description"></textarea>
<select name="category">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<input type="hidden" name="userID" id="userID" value="<?php get_current_user_id(); ?>">
<input type="submit" name="submit" class="submit action-button" value="Submit"/>
</form>
这是php ajax函数
function save_post () {
$new_post = array(
'post_title' => $_POST['title'],
'post_author' => $_POST['userID'],
'post_content' => $_POST['desc'],
'post_category' => array($_POST['category']),
'post_status' => 'publish',
'post_type' => 'post'
);
$post_id = wp_insert_post($new_post);
}
add_action('wp_ajax_nopriv_save_post','save_post');
add_action('wp_ajax_save_post','save_post');
单击提交按钮时,我在控制台中收到以下错误消息:
[object Object] :: error :: Bad Request
我在做什么错了?
答案 0 :(得分:1)
尝试此代码。 Ajax脚本中缺少action: 'save_post'
function save_post () {
$params = array();
parse_str($_POST['data'], $params);
$new_post = array(
'post_title' => $params['title'],
'post_author' => $params['userID'],
'post_content' => $params['desc'],
'post_category' => array($params['category']),
'post_status' => 'publish',
'post_type' => 'post'
);
$post_id = wp_insert_post($new_post);
die($post_id);
}
add_action('wp_ajax_nopriv_save_post','save_post');
add_action('wp_ajax_save_post','save_post');
<script>
jQuery( document ).ready(function() {
jQuery('input[type=button]').on('click', function() {
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
jQuery.ajax({
type: "POST",
data: {
data:jQuery('.event-form').serialize(),
action: 'save_post'
},
url: ajaxurl,
success: function(result) {
console.log('data sent!');
console.log('sent to: ' + templateDir + loadUrl );
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR + " :: " + textStatus + " :: " + errorThrown);
}
});
});
});
</script>
<form id="msform" name="review_form" class="form-horizontal event-form" method="POST" enctype="multipart/form-data">
<p><input type="text" name="title" placeholder="title" value="test"></p>
<textarea rows="4" name="desc" placeholder="Description"></textarea>
<select name="category">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<input type="hidden" name="userID" id="userID" value="<?php echo get_current_user_id(); ?>">
<input type="button" name="submit" class="submit action-button" value="Submit"/>
</form>