wp_handle_sideload() WP 2.6.0

Переміщує тимчасовий файл до папки 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

Приклади

0

#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 тип файлу

		// робимо щось на основі отриманих даних
	}

}

нотатки

список змін

З версії 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *