media_handle_sideload()
Завантажує файл у медіатеку WordPress із переданого масиву з даними про файл, аналогічно media_handle_upload() .
media_handle_upload() працює безпосередньо з глобальним масивом $_FILES , це не завжди зручно. Іноді зручніше вказати довільні дані файлу та обробити їх, для цього потрібна ця функція.
У фронтенді для роботи функції потрібні такі файли:
require_once ABSPATH. 'wp-admin/includes/image.php'; require_once ABSPATH. 'wp-admin/includes/file.php'; require_once ABSPATH. 'wp-admin/includes/media.php';
Якщо потрібно завантажити картинку URL (саме картинку), використовуєте аналогічну функцію media_sideload_image() .
wp_handle_sideload() ,
wp_insert_attachment() ,
wp_read_image_metadata() ,
wp_update_attachment_metadata() ,
wp_generate_attachment_metadata()
media_sideload_image()
Хуків немає.
Повертає
int|WP_Error. ID доданого вкладення. Об’єкт WP_Error у разі невдачі.
Використання
$id = media_handle_sideload( $file_array, $post_id, $desc = null, $post_data = array() );
- $file_array
(масив) (обов’язковий) - Масив з даними файлу – аналогічний
$_FILES . - $post_id
(число) (обов’язковий) - ID посту, до якого потрібно прикріпити файл після завантаження.
- $desc
(рядок) - Опис файлу, що завантажується. Стане значенням поля
post_title в
wp_posts .
Типово: null - $post_data
(масив) Дозволяє перезаписувати дані вкладення, що додається. Вказуються дані вкладення, які будуть записані в таблицю wp_posts : post_parent , post_title , post_excerpt і т.д. За замовчуванням:
array( 'post_mime_type' => $type, 'guid' => $url, 'post_parent' => $post_id, 'post_title' => $title, 'post_content' => $content, )
Типово: null
Приклади
#1 Завантаження файлу за 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';
$url = 'http://sworg/style/images/wp-header-logo.png';
$post_id = 3061;
$desc = "Логотип WordPress";
// Завантажимо файл
$tmp = download_url($url);
// Встановимо дані файлу
$file_array = [
'name' => basename( $url ), // ex: wp-header-logo.png
'tmp_name' => $tmp,
'error' => 0,
'size' => filesize($tmp),
];
// завантажуємо файл
$id = media_handle_sideload( $file_array, $post_id, $desc );
// якщо помилка
if( is_wp_error( $id ) ) {
@unlink($file_array['tmp_name']);
return $id->get_error_messages();
}
// видалимо тимчасовий файл
@unlink($tmp);
// все, файл завантажений і з'явиться в адмінці в медіафайлах#2 Завантаження файлу URL без прив’язки до конкретного посту
// у фронтенді потрібні ці файли //require_once ABSPATH. 'wp-admin/includes/image.php'; //require_once ABSPATH. 'wp-admin/includes/file.php'; //require_once ABSPATH. 'wp-admin/includes/media.php'; $url = "http://sworg/style/images/wp-header-logo.png"; $desc = "Логотип WordPress"; // завантажимо файл $tmp = download_url($url); // Коригуємо розум файлу в рядках запиту. $file_array = [ 'name' => basename( $url ), 'tmp_name' => $tmp ]; media_handle_sideload( $file_array, 0 ); // видалимо тимчасовий файл @unlink($tmp);
#3 Завантаження зовнішньої картинки та встановлення мініатюри запису
Функція, яка завантажуватиме зовнішню картинку із зазначеного УРЛ, зберігатиме картинку в директорію uploads і прикріплюватиме її до запису як мініатюру:
// ініціалізація функції
$post_id = 3061;
$file = 'http://sworg/style/images/wp-header-logo.png?1';
if( is_single( $post_id ) )
my_sideload_image( $post_id, $file, $desc = 'Опис картинки');
// код функції
function my_sideload_image( $post_id, $file, $desc = null ){
global $debug; // Визначається за межами функції як true
if( ! function_exists('media_handle_sideload') ) {
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 ($ file);
// Встановлюємо змінні розміщення
$file_array = [
'name' => basename( $file ),
'tmp_name' => $tmp
];
// Видаляємо тимчасовий файл, при помилці
if ( is_wp_error( $tmp ) ) {
$file_array['tmp_name'] = '';
if( $debug ) echo 'Помилка немає тимчасового файлу! <br />';
}
// Перевірки при дебазі
if( $debug ){
echo 'File array: <br />';
var_dump($file_array);
echo '<br /> Post id: '. $post_id . '<br />';
}
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Перевіряємо роботу функції
if ( is_wp_error( $id ) ) {
var_dump( $id->get_error_messages() );
} else {
update_post_meta($post_id, '_thumbnail_id', $id);
}
// видалимо тимчасовий файл
@unlink($tmp);
}
список змін
| З версії 2.6.0 | Введено. |
| З версії 5.3.0 | The $post_id parameter був зроблений optional. |