wp_handle_upload() - как загружать файлы в пользовательскую поддиректорию внутри uploads

12 апр. 2014 г., 13:09:56
Просмотры: 15K
Голосов: 5

Функция wp_handle_upload() работает, но загружает файлы туда, куда хочет (uploads/год/месяц).

Вопрос: Есть ли способ указать ей загружать файлы в пользовательскую директорию (uploads/мояпапка)? Или есть какая-то другая функция, которая может это сделать?

Что я пробовал:

  1. move_uploaded_file() из PHP (не смог разобраться с параметром целевой директории - это для плагина, и он должен работать у всех, независимо от структуры их директорий).

  2. https://yoast.com/smarter-upload-handling-wp-plugins

Я вставил этот код в основной файл моего плагина. Ничего не произошло. Но в комментариях видно, что у других это работает.

ПОЖАЛУЙСТА, если у вас есть ответ, дайте полный. Я могу получить $_FILES['мойфайл']. Какие шаги нужно сделать дальше, чтобы этот файл попал в uploads/мояпапка?

0
Все ответы на вопрос 1
2

Вы можете реализовать идею, предложенную Joost, и использовать фильтр upload_dir для временного изменения пути загрузки в другое место.

/**
 * Переопределяем стандартный путь загрузки.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/mycustomdir',
        'url'    => $dir['baseurl'] . '/mycustomdir',
        'subdir' => '/mycustomdir',
    ) + $dir;
}

На практике это делается так же просто:

// Регистрируем наш переопределенный путь.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Выполняем загрузку. WordPress переместит файл в 'uploads/mycustomdir'.
$result = wp_handle_upload( $_FILE['myfile'] );

// Возвращаем стандартные настройки.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
12 апр. 2014 г. 13:49:24
Комментарии

Спасибо за руководство. Это почти работает, но теперь я получаю сообщение: "Невозможно создать директорию wp-content/uploads/mycustomdir. Доступна ли родительская директория для записи сервером?". Мне кажется очевидным, что родительская директория доступна для записи сервером, так как загрузки в нее работают нормально.

CodeVirtuoso CodeVirtuoso
12 апр. 2014 г. 14:02:17

Пытаясь решить вышеуказанную проблему, я попробовал создать mycustomdir при активации плагина, используя этот фрагмент кода: http://www.wpmayor.com/code-snippet-to-create-a-directory-within-uploads-folder/ Результат: на моем локальном сервере это работает (как и ваш код) - но на рабочем сервере выводится сообщение: "Плагин сгенерировал 233 символа неожиданного вывода во время активации. Если вы видите сообщения 'headers already sent', проблемы с RSS-лентами или другие проблемы, попробуйте деактивировать или удалить этот плагин."

CodeVirtuoso CodeVirtuoso
12 апр. 2014 г. 14:51:05