Intereting Posts
Создал цикл для пользовательского сообщения CPT UI, но новый тип сообщения не отображается на пользовательской странице использование перезаписи для защиты страницы входа в систему Пытаться закодировать простой плагин, бесконечный цикл? перенаправление не работает в ajax-функции Как проверить список или фид всех сообщений под категорией и тегом? Создайте плагин из WordPress Настройка шаблона не сохраняется в wordpress Невозможно удалить пространство между заголовком и слайдером на веб-сайте wordpress Различные версии WordPress между локальными и производственными Замените Gravatar URL-адресом img для аватаров Лучшие практики для регрессионного тестирования сайтов WordPress? Комментарии от мобильных приложений & Disqus Как использовать несколько доменов в одной многоузловой установке? Как переименовать имя и slug по умолчанию с помощью WP CLI? Редактор не загружается должным образом на моем самообслуживании WordPress 3.3

Недопустимый тип файла при использовании wp_upload_bits для загрузки PDF в пользовательский тип сообщения

Я пытаюсь загрузить файл PDF для пользовательского типа сообщений под названием Products использующие wp_upload_bits . Я делаю это только в своем wp-admin. Я не хочу, чтобы эти файлы были добавлены в медиа-библиотеку, я просто хочу их загрузить и вернуть URL-адрес, когда я показываю Продукт.

Однако, когда я это делаю, я получаю ошибку, что это недопустимый тип файла, возвращаемый функцией. Я установил enctype, используя это в моих functions.php

 //Allow file uploads function update_edit_form() { echo ' enctype="multipart/form-data"'; } // end update_edit_form add_action('post_edit_form_tag', 'update_edit_form'); 

Вот мой код для генерации обменов в меню администратора

 function products_pdf_uploads_show_meta() { global $meta_box_pdf_uploads, $post, $prefix; echo '<table class="form-table">'; echo '<p class="description">Upload your PDFs here</p>'; foreach ($meta_box_pdf_uploads['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<td>', //'<input type="file" style="width: 700px;" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : null, '" />' '<input type="file" style="width: 700px;" name="', $field['id'], '" id="', $field['id'], '" />', '</td>', '</tr>'; } echo '</table>'; } add_meta_box($meta_box_pdf_uploads['id'], $meta_box_pdf_uploads['title'], 'products_pdf_uploads_show_meta', $meta_box_pdf_uploads['page'], $meta_box_pdf_uploads['context'], $meta_box_pdf_uploads['priority']); 

Это не имеет ничего общего с последней строкой? Где я add_meta_box и add_meta_box пользовательский тип сообщения PRODUCT а не задавая PAGE или POST? Просто, хотя.

Вот мой код для загрузки файла PDF для метабокса:

  //Upload PDF files foreach ($meta_box_pdf_uploads['fields'] as $pdf_field) { //put file array into a variable $pdf = $_FILES[$pdf_field['name']]; //if array is set and there is no error if(isset($pdf['error']) && $pdf['error'] > 0) { //setup error handling based on error code wp_die('Error uploading file: Error Number is ' . $pdf['error']); } else { //Passed //setup file type allowed $supported_file_type = array('application/pdf'); //Get the file type $uploaded_file_type = $pdf['type']; //check if file type is allowed if(in_array($uploaded_file_type, $supported_file_type)) { //upload file $uploaded_file = wp_upload_bits($_FILES[$pdf_field['name']], null, file_get_contents($_FILES[$pdf_field['tmp_name']])); print_r($uploaded_file); wp_die('did it upload?'); add_post_meta($post_id, $pdf_field['id'], $uploaded_file); update_post_meta($post_id, $pdf_field['id'], $uploaded_file); } else { // NOT A PDF wp_die('The file you tried to upload was not a PDF'); } } 

Когда я делаю print_r($uploaded_file) чтобы увидеть, что возвращает функция, я получаю Array ( [error] => Invalid file type )

Я проверил свой wp-includes/functions.php и, по-видимому, разрешает типы файлов в функции get_allowed_mime_types() .

 'pdf' => 'application/pdf', 

Я что-то упускаю?

Вот результат var_dump($_FILES) . В настоящее время у меня есть два поля, когда я тестирую, я выбираю только файл для загрузки для первого.

 array(2) { ["aps_pdf1"]=> array(5) { ["name"]=> string(12) "1testpdf.pdf" ["type"]=> string(15) "application/pdf" ["tmp_name"]=> string(14) "/tmp/phpwdXK0T" ["error"]=> int(0) ["size"]=> int(8278) } ["aps_pdf2"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } } 

Solutions Collecting From Web of "Недопустимый тип файла при использовании wp_upload_bits для загрузки PDF в пользовательский тип сообщения"

Ах, я понял это. После эха и print_r я могу понять, что эта строка:

 $uploaded_file = wp_upload_bits($_FILES[$pdf_field['name']], null, file_get_contents($_FILES[$pdf_field['tmp_name']])); 

Необходимо изменить на это:

 $uploaded_file = wp_upload_bits($pdf['name'], null, file_get_contents($pdf['tmp_name'])); 

Первоначальная проблема, с которой я столкнулся, в первую очередь не могла передать мой массив $ _FILE непосредственно в функции (я предполагаю, что я был в цикле foreach), чтобы увидеть, были ли установлены значения и т. Д. Поэтому я ставлю их в переменной $pdf = $_FILES[$pdf_field['name']]; ,

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

Я смог успешно загрузить PDF-файл на свой сервер.

Благодаря!