Что такое метаданные в медиатеке WordPress и зачем их удалять
Медиатека WordPress хранит не только изображения и файлы, но и множество метаданных, которые описывают эти файлы. Метаданные включают в себя информацию о названии, описании, альтернативном тексте (alt), EXIF-данные фотографий, а также пользовательские поля. Со временем эти данные могут накапливаться и занимать лишнее место в базе данных, а иногда содержать устаревшую или неправильную информацию.
Удаление или очистка метаданных помогает оптимизировать работу сайта, ускорить загрузку страниц, а также повысить безопасность, если в метаданных содержится конфиденциальная информация (например, GPS-координаты из EXIF).
В этой статье мы рассмотрим, как эффективно удалить или очистить метаданные в медиатеке WordPress через код и с помощью плагинов.
Удаление конкретных метаданных из медиатеки с помощью кода
Для удаления метаданных в WordPress используются функции для работы с постмета — так как медиафайлы в WordPress — это тип записи attachment, их метаданные хранятся в таблице wp_postmeta.
Рассмотрим пример функции для удаления определённого метаполя у всех вложений в медиатеке. Например, удалим пользовательское поле _wp_attachment_image_alt — альтернативный текст для изображения.
function wptool_remove_attachment_meta_alt() {
$attachments = get_posts([
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => 'any',
]);
foreach ( $attachments as $attachment ) {
delete_post_meta( $attachment->ID, '_wp_attachment_image_alt' );
}
}
// Запускаем функцию один раз
// wptool_remove_attachment_meta_alt();Эту функцию следует запускать единожды, например, через админский файл или через пользовательский плагин. После выполнения метаданные с ключом _wp_attachment_image_alt будут удалены у всех файлов.
По аналогии можно удалить и другие метаполя, указав их ключи. Для поиска всех метаполей можно использовать запрос к базе или плагины типа Adminer.
Удаление EXIF-метаданных из загружаемых изображений
Очень часто в метаданных изображений есть EXIF-информация, которая содержит данные о камере, дате съёмки и даже геолокации. Чтобы удалять эти данные автоматически при загрузке, можно использовать хук wp_handle_upload_prefilter и библиотеку PHP imagick или GD.
Вот пример функции, удаляющей EXIF из JPEG при загрузке:
function wptool_strip_exif_on_upload( $file ) {
if ( isset( $file['tmp_name'] ) && function_exists('exif_read_data') ) {
$mime = mime_content_type( $file['tmp_name'] );
if ( $mime === 'image/jpeg' ) {
$image = imagecreatefromjpeg( $file['tmp_name'] );
if ( $image ) {
imagejpeg( $image, $file['tmp_name'], 100 );
imagedestroy( $image );
}
}
}
return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wptool_strip_exif_on_upload' );Этот код перезаписывает загружаемый JPEG, удаляя всю EXIF-информацию. Такой подход повышает безопасность и снижает вес изображений.
Плагины для работы с метаданными медиатеки
Если вы не хотите писать код, можно использовать готовые плагины для управления метаданными медиатеки:
- Media Cleaner — удаляет неиспользуемые файлы и связанные с ними метаданные.
- Imsanity — автоматически сжимает и оптимизирует изображения, включая удаление EXIF.
- WP-Optimize — оптимизирует базу данных, удаляя лишние метаданные и ревизии.
Эти плагины помогут очистить медиатеку и базу данных без необходимости писать код.
Оптимизация базы данных: удаление устаревших метаданных
В базе данных WordPress метаданные хранятся в таблице wp_postmeta. Со временем там может накапливаться много лишних записей, например, оставшихся после удаления плагинов или тем.
Для безопасного удаления метаданных, связанных с медиатекой, можно использовать SQL-запросы или код. Например, чтобы удалить все метаданные, связанные с несуществующими вложениями:
function wptool_cleanup_orphan_attachment_meta() {
global $wpdb;
$wpdb->query( "DELETE pm FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE p.ID IS NULL
AND pm.post_id NOT IN (SELECT ID FROM {$wpdb->posts} WHERE post_type='attachment')" );
}
// wptool_cleanup_orphan_attachment_meta();Этот код удалит метаданные, посты к которым уже не существуют, что поможет очистить базу от мусора.
Рекомендации по безопасности и резервному копированию
Перед выполнением любых операций с метаданными и базой данных обязательно сделайте полную резервную копию сайта и базы данных. Удаление метаданных необратимо и может повлиять на работу сайта.
Также тщательно тестируйте код на тестовом сайте, чтобы избежать потери нужной информации или ошибок.
Используйте хук add_action('admin_init', 'wptool_remove_attachment_meta_alt') с осторожностью, чтобы функция запускалась только один раз.
Итог
Удаление метаданных из медиатеки WordPress — важный этап оптимизации сайта, который помогает уменьшить размер базы данных, повысить скорость и безопасность. Для этого можно использовать как готовые плагины, так и кастомный код, который позволяет гибко управлять данными. Внимательное тестирование и резервное копирование — обязательные условия успешной работы с метаданными.