Intereting Posts
перезаписывать и настраивать ссылки на странице нужна помощь с add_rewrite_rule Усиление моей игры с помощью WordPress хостинга Подключить модератор комментариев WordPress с помощью плагина bbPress Moderation Недопустимый крюк admin_post Страницы верхнего уровня переадресовываются на главную страницу! Удалить страницу меню Как выполнить функцию javascript непосредственно перед сохранением сообщения woocommerce или сообщения? Цикл Foreach, дублирующий таксономию thumbnail image Постоянная ссылка на страницу с датой Подкатегории сохраняют переадресацию на страницы с одинаковыми слизнями Как удалить размер миниатюр изображения с жестким кодированием? Отображение заголовка сообщения на странице «Редактировать страницу»? $ wpdb-> insert () не вставляет запись в таблицу Как создать форму электронной почты, в которой используется программа электронной почты гостей, чтобы отправить ее Крюки класса не стреляют

Использование wp_handle_upload и media_handle_sideload с ajax

Я пытаюсь выяснить, как использовать wp_handle_upload () с ajax при обработке формы. То, что я здесь делаю, это использовать форму, позволяющую пользователям редактировать сообщения с передней стороны, чтобы они могли делать некоторые вещи, такие как изменение изображения для сообщения, поэтому мы начнем с него.

Я собираюсь оставить куски этой функции, чтобы она была простой, включая проверку ошибок.

// Process the edit form add_action('wp_ajax_process_edit_form', 'process_edit_form'); function process_edit_form() { require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $image_file = $_POST['imageFile']; $image_file_name = $_POST['imageFileName']; $post_to_edit = get_post($_POST['postId']); // Set Image File if ($image_file["size"] > 0) { $cover_art_id = media_handle_sideload( $album_cover, $pid ); wp_set_object_terms( $cover_art_id, 'cover_art', 'category'); update_post_meta($pid,'music_art',$cover_art_id); } } 

И базовая форма html

 <form enctype="multipart/form-data"> <input type="file" name="image_file" id="image_file" /> <input type="submit" value="Save Changes" tabindex="6" id="submit" name="submit" data-id="<?php echo $post->ID; ?>" /> </form> 

И теперь некоторые jquery. Обратите внимание, что сценарий этого jquery был локализован, а все остальное в форме работает правильно, используя мои методы. Единственное, что не работает, – это загрузка файла в submit.

 $(document).on("click","#submit", function(e) { e.preventDefault(); $this = $(this); postId = $this.data("id"); imageFile = $this.closest("form").find("#image_file").val(); if (imageFile != "") { imageFileName = $this.closest("form").find("#image_file").val().split('\\').pop(); } else { imageFileName = "none"; }; data = { action: 'process_edit_form', postId : postId, imageFile : imageFile, imageFileName : imageFileName }; $.post(ajaxurl, data, function (response) { }); }); 

Возможно, я сделал некоторые ошибки, передавая это, но это в основном то, что я делаю. Так почему же это не работает? Я видел этот ответ, в котором говорится, что мне нужно использовать какой-то тип плагина для загрузки ajax, но я бы хотел сделать это без него, и если я не понимаю, как я их использую, чтобы сохранить загрузку в качестве вложения. Выпрямите меня!

Загрузка файлов в ajax несколько сложна, потому что невозможно загрузить файлы с помощью объекта XMLHttpRequest браузера, поэтому вам нужно использовать какой-то плагин для загрузки Ajax.

Также wp_handle_upload() не то, что вы используете в своем коде media_handle_sideload()

  • wp_handle_upload() – должен использоваться для загрузки файлов (поле входного файла)
  • media_handle_sideload() – должен использоваться для удаленных загрузок файлов (текстовое поле ввода)

взгляните на этот похожий вопрос