Функция media_handle_sideload()
позволяет загружать файлы в медиатеку WordPress, используя массив с данными о файле, аналогичный массиву $_FILES
, что удобно при работе с файлами, которые не загружены через форму на сайте. Она обрабатывает «побочные» файлы так же, как и функция media_handle_upload()
, но при этом позволяет загружать файлы с сервера или сторонних источников (например, по URL).
media_handle_sideload( string[] $file_array, int $post_id, string $desc = null, array $post_data = array() ): int|WP_Error
- $file_array (обязательный): массив, представляющий файл, аналогичный массиву
$_FILES
. - $post_id (необязательный): ID поста, к которому будет прикреплен файл. Если указать
0
, файл не будет связан с конкретным постом. - $desc (необязательный): описание файла, которое будет записано в поле
post_title
для создаваемого вложения. - $post_data (необязательный): массив для перезаписи данных вложения, таких как
post_title
,post_excerpt
, и т.д.
Возвращаемое значение
Возвращает ID созданного вложения или объект WP_Error
в случае ошибки.
1. Загрузка файла по URL и его привязка к посту
Этот пример показывает, как загрузить файл с внешнего ресурса (например, картинку) и прикрепить его к указанному посту в WordPress.
// URL файла, который необходимо загрузить
$url = 'https://example.com/images/sample-image.png';
// Скачиваем файл во временное местоположение
$tmp = download_url( $url );
// Подготовим массив с данными о файле
$file_array = array(
'name' => basename( $url ), // Имя файла
'tmp_name' => $tmp, // Временное имя файла
);
// Проверка на наличие ошибок при загрузке
if ( is_wp_error( $tmp ) ) {
@unlink( $file_array['tmp_name'] ); // Удаление временного файла в случае ошибки
return $tmp;
}
// ID поста, к которому прикрепляется файл
$post_id = 123;
// Загружаем файл в медиатеку
$attachment_id = media_handle_sideload( $file_array, $post_id );
// Проверка на ошибки при загрузке
if ( is_wp_error( $attachment_id ) ) {
@unlink( $file_array['tmp_name'] );
return $attachment_id;
}
// Получаем URL загруженного файла
$file_url = wp_get_attachment_url( $attachment_id );
// Используем URL файла для дальнейшей работы
2. Загрузка файла без привязки к посту
Если нужно загрузить файл, но не прикреплять его к какому-либо посту, можно использовать 0
в качестве параметра $post_id
.
// URL файла
$url = 'https://example.com/images/sample-image.png';
// Скачиваем файл
$tmp = download_url( $url );
// Массив с данными файла
$file_array = array(
'name' => basename( $url ),
'tmp_name' => $tmp,
);
// Загрузка файла без привязки к посту
$attachment_id = media_handle_sideload( $file_array, 0 );
// Проверка ошибок
if ( is_wp_error( $attachment_id ) ) {
@unlink( $file_array['tmp_name'] );
return $attachment_id;
}
// Удаление временного файла
@unlink( $tmp );
3. Установка миниатюры для поста на основе загруженного изображения
Можно использовать функцию для загрузки изображения и установки его в качестве миниатюры (thumbnail) для поста.
function set_post_thumbnail_from_url( $post_id, $image_url ) {
// Загрузка необходимых файлов WordPress
require_once ABSPATH . 'wp-admin/includes/image.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
// Скачиваем файл
$tmp = download_url( $image_url );
// Подготовка массива файла
$file_array = array(
'name' => basename( $image_url ),
'tmp_name' => $tmp,
);
// Проверяем наличие ошибок при скачивании
if ( is_wp_error( $tmp ) ) {
@unlink( $file_array['tmp_name'] );
return false;
}
// Загрузка файла в медиатеку
$attachment_id = media_handle_sideload( $file_array, $post_id );
// Проверка на ошибки
if ( is_wp_error( $attachment_id ) ) {
@unlink( $file_array['tmp_name'] );
return false;
}
// Устанавливаем миниатюру для поста
set_post_thumbnail( $post_id, $attachment_id );
// Удаление временного файла
@unlink( $tmp );
return true;
}
// Использование функции для поста с ID 789 и изображения по URL
set_post_thumbnail_from_url( 789, 'https://example.com/images/sample-image.png' );
Заключение
Функция media_handle_sideload()
предоставляет удобный способ работы с файлами, которые необходимо загрузить в медиатеку WordPress, не используя форму для загрузки. Она особенно полезна для загрузки файлов из внешних источников и работы с ними, как с вложениями.