Функция wp_generate_attachment_metadata()
в WordPress предназначена для генерации метаданных для вложений, а также для создания промежуточных размеров изображений (например, миниатюр) на основе настроек, заданных в админ-панели. Она автоматически создает необходимые размеры для изображения, что облегчает работу с медиафайлами на сайте.
wp_generate_attachment_metadata( int $attachment_id, string $file ): array
Параметры
- $attachment_id (int, обязательный): ID вложения, для которого нужно сгенерировать метаданные.
- $file (string, обязательный): Путь к файлу вложения. Необходимо использовать абсолютный путь, а не URI.
Возвращаемое значение
Функция возвращает массив с метаданными вложения, который включает такие элементы, как ширина, высота, пути к промежуточным изображениям и т.д. Если операция завершилась неудачно, возвращается null
.
1. Генерация метаданных для изображения
Допустим, у нас есть изображение с ID 82, которое уже загружено в директорию uploads
. Мы можем сгенерировать метаданные для этого изображения следующим образом:
$id = 82;
$file = '/var/www/example.com/wp-content/uploads/2023/10/sample-image.jpg';
$metadata = wp_generate_attachment_metadata($id, $file);
if ($metadata) {
echo '<pre>';
print_r($metadata);
echo '</pre>';
}
В результате переменная $metadata
может содержать следующий массив:
Array
(
[width] => 1024
[height] => 768
[file] => 2023/10/sample-image.jpg
[sizes] => Array
(
[thumbnail] => Array
(
[file] => sample-image-150x150.jpg
[width] => 150
[height] => 150
[mime-type] => image/jpeg
)
[medium] => Array
(
[file] => sample-image-300x300.jpg
[width] => 300
[height] => 300
[mime-type] => image/jpeg
)
[large] => Array
(
[file] => sample-image-1024x768.jpg
[width] => 1024
[height] => 768
[mime-type] => image/jpeg
)
)
[image_meta] => Array
(
[aperture] => 2.8
[credit] => Photographer Name
[camera] => Canon EOS 5D Mark III
[created_timestamp] => 1634842800
[copyright] => (c) 2023 Photographer Name
[focal_length] => 50
[iso] => 100
[shutter_speed] => 0.01
[title] => Sample Image
)
)
2. Загрузка изображения и создание миниатюры
Теперь рассмотрим пример, где мы загружаем новое изображение на сервер и прикрепляем его к посту с ID 45. После загрузки мы создаем миниатюру и все промежуточные размеры изображения.
$filename = '/path/to/uploads/2023/10/new-image.jpg';
$parent_post_id = 45;
// Проверим MIME-тип файла.
$filetype = wp_check_filetype(basename($filename), null);
// Получаем путь до директории загрузок.
$wp_upload_dir = wp_upload_dir();
// Подготовим массив с данными для вложения.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($filename),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit'
);
// Вставляем запись в базу данных.
$attach_id = wp_insert_attachment($attachment, $filename, $parent_post_id);
// Подключим нужный файл, если он еще не подключен.
require_once(ABSPATH . 'wp-admin/includes/image.php');
// Создадим метаданные для вложения и обновим запись в базе данных.
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);
В этом примере мы сначала создаем массив с данными для вложения, затем вставляем запись в базу данных и генерируем метаданные. В результате все необходимые промежуточные размеры изображения будут созданы автоматически.
Заключение
Функция wp_generate_attachment_metadata()
значительно упрощает управление медиафайлами в WordPress. Она позволяет автоматически создавать необходимые размеры изображений и обновлять их метаданные, что делает процесс работы с медиафайлами более удобным и эффективным.