wp_handle_upload() WP 2.0
Обрабатывает загрузку файла через $_FILES. Очищает название файла, проверяет расширение файла (на основе mime типа) и сохраняет файл в соответствующий каталог wp-content/uploads/....
media_handle_upload() работает напрямую с суперглобальным массивом $_FILES, это не всегда удобно. Иногда удобнее указать данные файла в массиве и обработать их, для этого используйте media_handle_sideload().
Работает на основе PHP функции move_uploaded_file().
Хуков нет.
Возвращает
Массив/любое значение.
При успешной загрузке возвращает ассоциативный массив данных, такого формата:
Array ( [file] => sites/wptest.ru/www/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3 [url] => http://wptest.ru/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3 [type] => audio/mpeg )
type и file можно использовать в функции wp_insert_attachment().
При неудаче, возвращает:
- $overrides['upload_error_handler']( &$file, $file['error'] ) - когда указан параметр upload_error_handler, в котором указывается название функции обрабатывающей неудачную загрузку. Функция получит 2 параметра &$file и $file['error']
- array( 'error'=>$message ) - по умолчанию, когда не указана функция обработки ошибки.
Использование
$movefile = wp_handle_upload( $file, $overrides, $time );
- $file(массив) (обязательный)
- Элемент массива $_FILES, который содержит массив данных о принятом файле (название, тип, размер, временное расположение). Функцию нужно вызывать при загрузке каждого файла. Параметр передается по ссылке (&$file), поэтому нужно передавать переменную.
- $overrides(массив)
Ассоциативный массив, чтобы перезаписать дефолтные переменные используемые в функции (переменные извлекаются так: extract( $overrides, EXTR_OVERWRITE )).
Чтобы произошла реальная загрузка файла обязательно нужно указать параметр
'test_form' => FALSE
, в противном случае это будет просто тестирование работы формы.Переменные которые можно перезаписать в этом параметре:
-
upload_error_handler
- название функции обработки ошибок. По умолчанию 'wp_handle_upload_error'; -
unique_filename_callback
- Название функции по уникализации переданного имени файла. По умолчанию null; - Параметры тестирования:
test_form
- По умолчанию true;test_size
= По умолчанию true;test_upload
= По умолчанию true;
Если перезаписать эти параметры, то нужно передать $ext и $type:test_type
- По умолчанию true;mimes
- По умолчанию false;
По умолчанию: false
-
- $time(строка)
- Время в формате ГГГГ/мм. Указанное время передается в функцию wp_upload_dir().
По умолчанию: null
Примеры
#1 Загрузка файла
Пример использования функции. Показывает как загрузить файл в каталог WP "uploads", который передается в форме. Пусть так выглядит наша форма:
<form enctype="multipart/form-data" action="" method="POST"> <?php wp_nonce_field( 'my_file_upload', 'fileup_nonce' ); ?> <input name="my_file_upload" type="file" /> <input type="submit" value="Загрузить файл" /> </form>
Атрибут enctype="multipart/form-data"
обязателен, для того чтобы форма могла работать с файлами. Иначе поле type="file"
просто не будет ничего передавать в $_FILES.
Тогда код загрузки файла будет такой:
if( wp_verify_nonce( $_POST['fileup_nonce'], 'my_file_upload' ) ){ if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' ); $file = & $_FILES['my_file_upload']; $overrides = [ 'test_form' => false ]; $movefile = wp_handle_upload( $file, $overrides ); if ( $movefile && empty($movefile['error']) ) { echo "Файл был успешно загружен.\n"; print_r( $movefile ); } else { echo "Возможны атаки при загрузке файла!\n"; } }
Заметки
- Смотрите: _wp_handle_upload()
Список изменений
С версии 2.0.0 | Введена. |
Код wp_handle_upload() wp handle upload WP 5.6.2
function wp_handle_upload( &$file, $overrides = false, $time = null ) {
/*
* $_POST['action'] must be set and its value must equal $overrides['action']
* or this:
*/
$action = 'wp_handle_upload';
if ( isset( $overrides['action'] ) ) {
$action = $overrides['action'];
}
return _wp_handle_upload( $file, $overrides, $time, $action );
}