Здравствуйте!
Я хочу из из формы загрузить файлы на сервер используя AJAX и Action (WordPress).
Я столкнулся с тем, что сами файлы не передаются, но почему это происходит я не понимаю. При чем, все данные кроме файлов передаются.
Вот листинг:
var form = $(this).parents(".form-post-add")
var files = $('.box__file').get(0).files;
var form_data = new FormData();
form_data.append('action', 'post_add');
form_data.append('nonce', nonce);
form_data.append('post_title', form.find('input[name="post_title"]').get(0).value);
form_data.append('post_content', form.find('textarea[name="post_content"]').get(0).value);
$.each(files, function(key, value) {
form_data.append('FileUpload', value);
});
$.ajax({
data: form_data,
type: 'POST',
processData: false,
contentType: false,
success: function(data, jqForm, options) {
/* код */
}
});
PHP
add_action('wp_ajax_post_add', 'post_add');
function post_add() {
$nonce = $_POST['nonce'];
$title = $_POST['post_title'];
$content = $_POST['post_content'];
$current_user = wp_get_current_user();
$current_user_id = $current_user->ID;
$new_post_data = array(
'post_author' => $current_user_id,
'post_content' => $content,
'post_title' => $title,
'post_status' => 'publish'
);
$post_id = wp_insert_post($new_post_data);
if (!function_exists('wp_generate_attachment_metadata')){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
if ($_FILES) {
foreach ($_FILES as $file => $image) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "upload error : " . $_FILES[$file]['error'];
}
$attach_id = wp_handle_upload( $image['tmp_name'], $post_id );
}
}
if ($attach_id > 0){
$post = get_post($post_id,'ARRAY_A');
$image = wp_get_attachment_image_src( $attach_id );
$image_tag = '<img src="'.$image[0].'" width="'.$image[1].'" height="'.$image[2].'" />';
$post['post_content'] = $image_tag . $post['post_content'];
//$post['post_content'] = $post['post_content'] . $image_tag;
$post_id = wp_update_post( $post );
}
$success = array(
'post_new' => $post_id
);
if ($errors) wp_send_json_error( $errors );
else wp_send_json_success( $success );
die();
};