В WordPress при загрузке медиафайлов (изображений, видео, аудио) автоматически сохраняется множество метаданных, таких как EXIF, IPTC, размеры, дата съемки и прочие. Иногда эти данные занимают много места, могут содержать чувствительную информацию или просто мешают оптимизации сайта. В этой статье мы подробно разберём, как удалить или изменить метаданные медиафайлов без использования плагинов, используя собственный код и стандартные функции WordPress.
Почему важно управлять метаданными медиафайлов в WordPress
Многие пользователи не задумываются о том, что в медиафайлах содержится много дополнительной информации, которая не всегда нужна. Вот несколько причин почему стоит управлять этими данными:
- Сокращение размера файлов: удаление метаданных уменьшает вес изображений и других файлов, что ускоряет загрузку страниц.
- Защита конфиденциальности: EXIF-данные могут содержать GPS-координаты и другую информацию, которую не стоит раскрывать.
- Оптимизация SEO: корректные и чистые метаданные позволяют лучше управлять медиа и избегать дублирования.
- Упрощение управления медиа: иногда метаданные мешают работе с изображениями, особенно при импорте и экспортировании.
Как WordPress хранит метаданные медиафайлов
При загрузке файла WordPress создает запись в таблице wp_posts с типом attachment. Дополнительные сведения о файле сохраняются в wp_postmeta, в частности в мета-ключах _wp_attachment_metadata и других.
Метаданные, которые мы видим в админке (название, описание, альтернативный текст, заголовок), хранятся отдельно, а технические данные EXIF, IPTC и прочие обычно остаются в самом файле, если не применена их очистка.
Удаление метаданных из изображений на этапе загрузки
Один из самых эффективных способов — использовать фильтр wp_handle_upload_prefilter для обработки файла до сохранения. При этом можно применить PHP-библиотеку exif_read_data для чтения и imagejpeg или подобные функции для перезаписи файла без метаданных.
Пример кода удаления EXIF-данных из JPEG на этапе загрузки
add_filter('wp_handle_upload_prefilter', 'wpbloger_remove_exif_metadata');
function wpbloger_remove_exif_metadata($file) {
$mime = $file['type'];
if ($mime === 'image/jpeg') {
$image = imagecreatefromjpeg($file['tmp_name']);
if ($image !== false) {
// Перезаписываем изображение без метаданных
imagejpeg($image, $file['tmp_name'], 90); // 90 - качество
imagedestroy($image);
}
}
return $file;
}
Этот код удалит EXIF из JPEG-файлов при загрузке, что уменьшит размер файла и удалит лишние данные.
Изменение метаданных в медиабиблиотеке WordPress программно
Если нужно изменить или очистить метаданные не в файлах, а в базе данных, можно работать с функциями WordPress для работы с метаданными вложений.
Метаданные хранятся в сериализованном массиве в _wp_attachment_metadata. Для изменения можно получить их, изменить нужные поля и сохранить обратно.
Пример функции изменения названия и описания вложения
function wpbloger_update_attachment_meta($attachment_id, $title, $description) {
$post = array(
'ID' => $attachment_id,
'post_title' => $title,
'post_content' => $description
);
wp_update_post($post);
}
Вызывайте эту функцию с ID вложения и новыми значениями. Это изменит данные, видимые в админке и на сайте.
Автоматическая очистка метаданных для всех уже загруженных изображений
Иногда нужно массово очистить метаданные для всех файлов в медиабиблиотеке. Это можно сделать с помощью WP-CLI или через скрипт.
Вот пример скрипта, который перебирает все вложения и очищает EXIF для JPEG:
function wpbloger_clear_all_exif() {
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image/jpeg',
'posts_per_page' => -1,
'post_status' => 'inherit',
);
$query = new WP_Query($args);
foreach ($query->posts as $attachment) {
$file = get_attached_file($attachment->ID);
if (file_exists($file)) {
$image = imagecreatefromjpeg($file);
if ($image) {
imagejpeg($image, $file, 90);
imagedestroy($image);
// Обновляем размеры и метаданные в базе
wp_update_attachment_metadata($attachment->ID, wp_generate_attachment_metadata($attachment->ID, $file));
}
}
}
}
Запускать эту функцию нужно аккуратно, например, по крону или вручную через админку, чтобы не перегрузить сервер.
Полезные плагины для управления метаданными медиа
Хотя задача стоит использовать код без плагинов, иногда нужны готовые решения для удобства:
- Clearfy Pro — содержит инструменты для оптимизации и очистки сайта, включая медиа.
- WPRemark — плагин для управления отзывами и комментариями, может помочь при работе с медиа в отзывах.
Эти плагины могут облегчить настройку и оптимизацию, если вы не хотите писать свой код.
Заключение
Управление метаданными медиафайлов — важная задача для повышения производительности и безопасности сайта на WordPress. Используя стандартные хуки и функции PHP, можно эффективно удалять или изменять метаданные без использования сторонних плагинов. Внимательное отношение к этим данным поможет сделать сайт быстрее, безопаснее и удобнее в управлении.