wp_handle_sideload()
Переміщує тимчасовий файл до папки uploads.
Вказує назву події: wp_handle_sideload . Ви можете змінити подію в змінній $overrides[‘action’] .
В основі цієї функції лежить _wp_handle_upload() . Вона обробляє PHP завантаження файлу: очищає назву файлу(ів), перевіряє розширення для mime типів, зберігає (переміщає) файл у потрібну папку у папці uploads .
Для роботи функції не в адмінці потрібно підключити файл:
// підключаємо необхідні нам функції: download_url() і wp_handle_sideload() require_once ABSPATH. 'wp-admin/includes/file.php';
Дивіться wp_handle_upload() – аналог цієї функції тільки працює з масивом $_FILES , а не з переданими даними файлу.
_wp_handle_upload()
media_handle_sideload()
Хуків немає.
Повертає
Массив
.
Масив із параметрами завантаженого файлу.
array( 'url' => 'https://example.com/wp-content/uploads/2022/05/file-name.png', 'file' => '/home/user/example.com/wp-content/uploads/2022/05/file-name.png', 'type' => 'image/png', )
- При невдачі поверне $overrides[‘upload_error_handler’] або масив
[ 'error' => $message ]
.
Використання
wp_handle_sideload($file, $overrides, $time);
-
$file
(масив) (обов’язковий) Масив з даними файлу – аналогічний PHP масиву $_FILES, який передається у запиті POST.
Array ( [name] => MyFile.txt // береться з форми браузера, тому не довіряємо [type] => text/plain // Тип файлу. Береться звідкись із браузера - не довіряємо [tmp_name] => /tmp/php/php1h4j1o // сам файл - дані файлу у файлі. Можна довіряти [error] => UPLOAD_ERR_OK // = 0 [size] => 123 // Розмір файлу в байтах - 1 КБ = 1024 Байт )
-
$overrides
(масив/логічний) Асоціативний масив
name => value
, дозволяє змінити параметри за замовчуванням. Можливі параметри:- upload_error_handler (рядок) – своя функція обробки помилок. За замовчуванням: ‘wp_handle_upload_error’ .
- unique_filename_callback (рядок) – своя функція унікалізації імені файлу. Типово: null .
- test_form (true/false) — Типово: true .
- test_size (true/false) — Типово: true .
- test_type (true/false) – при перевизначенні потрібно вказати $ext і $type . Типово: true.
- mimes (true/false) – при перевизначенні потрібно вказати $ext і $type . Типово: false .
Типово: false
-
$time
(рядок) -
Час у форматі
yyyy/mm
використовується для побудови шляху для папки uploads – куди файл буде завантажений. Передається до
wp_upload_dir() щоб переписати папку завантаження за замовчуванням.
Типово: null
Приклади
#1 Завантаження віддаленого файлу (з іншого сервера) у папку uploads.
Цей приклад використовує download_url() , щоб завантажити цей файл, а потім перемістити його в каталог uploads.
// у фронт-енді для роботи функції потрібен наступний файл: 'wp-admin/includes/file.php' // підключаємо необхідні нам функції: download_url() і wp_handle_sideload() require_once(ABSPATH. 'wp-admin/includes/file.php'); // URL на лого WordPress $url = 'http://sworg/style/images/wp-header-logo.png'; $timeout_seconds = 5; // завантажуємо файл у тимчасову папку $ temp_file = download_url ($ URL, $ timeout_seconds); if( ! is_wp_error( $temp_file ) ){ // Зберемо масив аналогічний $_FILE в PHP $file = array( 'name' => basename($url), // отримає: wp-header-logo.png 'type' => 'image/png', 'tmp_name' => $temp_file, 'error' => 0, 'size' => filesize($temp_file), ); $overrides = array( // скажімо WP не шукати поля форми, які зазвичай мають бути. // Завантажуємо файл з віддаленого сервера, тому полів форми немає. 'test_form' => false, ); // Переміщаємо тимчасовий файл до папки uploads $results = wp_handle_sideload( $file, $overrides ); if( ! empty($results['error']) ){ // Додайте сюди обробник помилок } else { $filename = $results['file']; // Повний шлях до файлу $local_url = $results['url']; // URL до файлу в папці uploads $type = $results['type']; // MIME тип файлу // робимо щось на основі отриманих даних } }
нотатки
- Дивіться: _wp_handle_upload()
список змін
З версії 2.6.0 | Введено. |
wp handle sideload WP 6.0.2
function wp_handle_sideload( &$file, $overrides = false, $time = null ) { /* * $_POST['action'] must be set and its value must equal $overrides['action'] * or this: */ $action = 'wp_handle_sideload'; if ( isset( $overrides['action'] ) ) { $action = $overrides['action']; } return _wp_handle_upload( $file, $overrides, $time, $action ); }