我正在创建一个简单的插件,允许用户将内容添加到自定义帖子类型。前端表单包括一些文本字段和文件上载字段。 我使用ajax提交表单并且工作正常。但是,我正在尝试使文件上载字段也能正常工作。文件上传后,其值(网址)将添加为自定义字段。
我对ajax并不熟悉,这可能是我到目前为止尝试失败的原因。下面是我目前使用的代码,减去文件上传内容:
JS:
(function($) {
$('.btn').on('click', function(e) {
$('.btn').html('<i class="fa fa-spinner fa-pulse"></i>')
e.preventDefault();
var fname = $('#first-name').val();
var lname = $('#last-name').val();
var email = $('#email').val();
var address = $('#address').val();
var phone = $('#phone').val();
var security = $('#security').val();
//var file = $('#entryfile').files[0];
// ajax the results!
$.ajax({
url: ajax.ajax_url,
type: "POST",
dataType : "json",
contentType: false,
processData: false,
data: {
action: 'entry_add',
fname:fname,
lname:lname,
email:email,
address:address,
phone:phone,
nonce: security,
file:file
},
success: function( response ) {
console.log( response );
$('.contest-entry').hide('500', function() {
$('.message > h2').html( response );
$('.message').show('fast');
});
}
});
});
})( jQuery );
PHP:
function ajax_entry() {
check_ajax_referer( 'add-entry-nonce', 'nonce' );
$email = urldecode($_POST['email']);
$fname = wp_strip_all_tags($_POST['fname']);
$lname = wp_strip_all_tags($_POST['lname']);
$addr = wp_strip_all_tags($_POST['address']);
$phone = wp_strip_all_tags($_POST['phone']);
$success = "<i class='fa fa-check'></i> Thanks for joining! You will be reditected to step 2 in a few seconds";
$error = "<i class='fa fa-exclamation-triangle'></i> Looks like something went wrong! Try again maybe?";
if( !empty($email) && !empty($fname) && !empty($lname) && !empty($addr) ) {
$postData = array(
'post_title' => $fname . ' ' . $lname,
'post_type' => 'contestants',
'post_status' => 'draft'
);
$post = wp_insert_post( $postData );
add_post_meta($post, "field_entry_unique", "WTH-".$post);
add_post_meta($post, "field_first_name", $fname);
add_post_meta($post, "field_last_name", $lname);
add_post_meta($post, "field_email", $email);
add_post_meta($post, "field_address", $addr);
add_post_meta($post, "field_status", "pending");
add_post_meta($post, "field_phone", $phone);
if( $post != -1 ) {
//echo json_encode($success);
echo json_encode($file);
} else {
echo json_encode($error);
}
} else {
echo json_encode($error);
}
exit;
}
你能帮我找一个上传工作的方法吗?
修改 到目前为止我遇到的所有解决方案都不起作用(或者我不能使它们工作),需要第二个表单或打破现有表单,因此不允许创建帖子。 关于如何做到这一点,我需要一些指导(几行示例代码也会很棒)。 jQuery不是我的力量......
更新 我设法使用下面的方法来完成这项工作。但是,在注销时,上载失败,控制台会将重定向记录到登录页面。有什么想法吗?
var formData = new FormData();
formData.append("action", "upload-attachment");
var fileInputElement = document.getElementById("entryfile");
formData.append("async-upload", fileInputElement.files[0]);
formData.append("name", fileInputElement.files[0].name);
formData.append("_wpnonce", upload_nonce);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200){
console.log(xhr.responseText);
}
}
xhr.open("POST","wp-admin/async-upload.php",true);
xhr.send(formData);