Intereting Posts
Выполнить функцию PHP внутри области администратора Настройка настраиваемых полей, когда категории выбраны подкатегории фильтров Нужна помощь в добавлении правил перезаписи на страницу Вложенные инструкции if для эха только одной строки на основе того, какой тег был отфильтрован? Разбиение страниц на пользовательские типы сообщений Добавить изображение со сменными ссылками в пользовательском поле Что такое обратный вызов, отправленный в add_submenu_page (), вызванный WordPress? Принуждение HTTPS к WordPress на AWS Почему url_to_postid () не работает из плагина? Список сообщений по категориям исключить текущую должность Как получить домашнюю страницу сайта из плагина? На странице категории, как я могу получить идентификатор категории? Woocommerce – хотите заблокировать пользовательский агент от доступа к определенным страницам продукта Нерегулярный ответ времени TTFB и сервера Где я использую add_rewrite_rule?

Загрузка файла переднего конца, возвращающего неправильный URL-адрес приложения

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

Я отлично работаю, он загружает файл в нужную папку ..etc, но единственная проблема, с которой я столкнулся, – это возврат неправильного URL-адреса файла.

Например, при загрузке файла он переходит в '/wp-content/uploads/2014/01/file.png', но возвращает URL-адрес вложения как '/uploads/file.png'

Мой код:

define('WP_USE_THEMES', false); require_once($_SERVER['DOCUMENT_ROOT']. '/wp-load.php'); include_once($_SERVER['DOCUMENT_ROOT']. '/wp-admin/includes/media.php'); include_once($_SERVER['DOCUMENT_ROOT']. '/wp-admin/includes/file.php'); include_once($_SERVER['DOCUMENT_ROOT']. '/wp-admin/includes/image.php'); if(!$_FILES) exit; if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); //define variables if(isset($_FILES['fileUpload'])) {$files = $_FILES['fileUpload'];} $upload_dir = wp_upload_dir(); $file_name = $files['name']; $file_vars = array('test_form' => FALSE); //Allows form submission $file_post = wp_handle_upload($files, $file_vars); //Posts File $file_link = $file_post['url']; //Full URL $file_type = wp_check_filetype(basename($file_link), null); //File Extension $post_name = preg_replace('/\.[^.]+$/', '', basename($file_link)); //Post Name $attachment = array( 'guid' => $file_link, 'post_mime_type' => $file_type['type'], 'post_title' => $post_name, 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment($attachment, $file_name); //Generates meta $attach_data = wp_generate_attachment_metadata($attach_id, $file_name); //Updates meta $attach_final = wp_update_attachment_metadata($attach_id, $attach_data); 

Любая идея, что я делаю неправильно?

Для wp_insert_attachment и wp_generate_attachment_metadata измените $file_name следующим образом.

 $file_name = $upload_dir['path'] . '/' . basename($file_name); 

WordPress codex для обеих функций ( здесь и здесь ) говорит: «Используйте абсолютный путь, а не URI файла. Файл ДОЛЖЕН быть в каталоге uploads ' $_FILES['fileUpload'] просто дает имя файла, а не абсолютный путь вместе с.

Некоторое время назад я сделал что-то подобное, и не переделывая все строки за строкой, чтобы помнить, как именно я это сделал, единственное, что я вижу в своем коде по сравнению с вашим, – это у вас есть:

 $file_link = $file_post['url']; 

тогда как у меня есть что-то вроде:

 $file_link = $file_post['file']; 

Смотрите, если это имеет значение …