Intereting Posts

Загрузка пользовательского изображения

Я пытаюсь настроить загрузку для вложений для моей пользовательской формы сообщения.

Сначала я добавляю в свой тег form enctype="multipart/form-data"

Для целей тестирования у меня есть две формы загрузки, но в будущем я собираюсь реализовать только одну форму и использовать jQuery для добавления как можно большего количества форм.

  <fieldset class="images"> <label for="images">Front of the Bottle</label> <input type="file" name="image1" id="bottle_front" size="50"> </fieldset> <fieldset class="images"> <label for="images">Back of the Bottle</label> <input type="file" name="image2" id="bottle_rear" size="50"> </fieldset> 

в PHP я использую:

  if ($_FILES) { foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$post_id); // $newupload returns the attachment id of the file that // was just uploaded. Do whatever you want with that now. } } 

и в functions.php у меня есть функции, которые должны обрабатывать эту форму.

 function insert_attachment($file_handler,$post_id,$setthumb='false') { // check to make sure its a successful upload if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id); return $attach_id; } 

все работает pefect, если я просто загружаю два изображения, но если я хочу загрузить только один OR none, я получаю ошибку my post_meta db:

 O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:21:"No file was uploaded.";}}s:10:"error_data";a:0:{}} 

Я попытался вставить: if ($ _FILES [$ file_handler] ['error'] === 4) __return_false (); в functions.php, но он не работает, как сказать моему скрипту, что моя форма пуста?

Кредиты: взяли эту форму отсюда

Может быть, вы не возвращаетесь правильно из функции, попробуйте это,

 function insert_attachment($file_handler, $post_id, $setthumb=false) { // check to make sure its a successful upload // changes start if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) { return __return_false(); } // changes end require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); if ($setthumb) update_post_meta($post_id, '_thumbnail_id', $attach_id); return $attach_id; } 

С моей точки зрения, лучше просто повторно использовать существующую собственную функцию WordPress с изображениями, которые позволяют вам загружать изображения в свой собственный тип сообщений.

Вы можете включить при регистрации своего пользовательского сообщения, добавив опцию

 'supports' => array('thumbnail') 

таких как множество других полезных функций