В WordPress медиафайлы хранятся в библиотеке и сопровождаются метаданными, такими как заголовок, описание, альтернативный текст и другие поля. Иногда возникает необходимость массово изменить или удалить эти метаданные, например, для улучшения SEO, очистки базы или изменения данных на лету. В этой статье разберем, как работать с метаданными медиафайлов без использования плагинов, используя собственный код и стандартные функции WordPress.
Что такое метаданные медиафайлов в WordPress и где они хранятся
Медиафайлы в WordPress — это записи типа attachment, которые содержат основную информацию о файле. Сам файл физически хранится в директории wp-content/uploads, а его метаданные — в базе данных в таблицах wp_posts (основные данные) и wp_postmeta (дополнительные метаданные).
Основные метаданные, которые можно изменить вручную в админке или программно, это:
- post_title — заголовок файла;
- post_excerpt — описание;
- post_content — подробное описание;
- _wp_attachment_image_alt — альтернативный текст для изображений;
- различные технические данные, хранящиеся как мета-поля, например размеры, типы, EXIF и прочее.
Для массовой работы с этими данными можно использовать WP_Query и функции обновления постов и мета-полей.
Как получить и изменить метаданные медиафайла программно
Для начала нужно получить ID нужного вложения — это может быть сделано через WP_Query или если вы знаете ID, сразу работать с ним. Пример функции для изменения альтернативного текста:
function wpbloger_update_attachment_alt($attachment_id, $new_alt) {
update_post_meta($attachment_id, '_wp_attachment_image_alt', $new_alt);
}
Эта функция обновит альтернативный текст у выбранного медиафайла.
Чтобы изменить заголовок и описание:
function wpbloger_update_attachment_title_desc($attachment_id, $new_title, $new_description) {
$post_data = array(
'ID' => $attachment_id,
'post_title' => $new_title,
'post_content' => $new_description
);
wp_update_post($post_data);
}
Таким образом, можно программно менять любые основные и мета-поля.
Получение списка всех медиафайлов для обработки
Если нужно массово обработать медиафайлы, используйте WP_Query с параметром post_type=attachment. Например:
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$attachment_id = get_the_ID();
// Здесь вызывайте функции обновления метаданных
}
}
wp_reset_postdata();
С помощью такого цикла можно перебрать все медиафайлы и применить нужные изменения.
Как удалить метаданные медиафайлов
Удаление метаданных полезно, если вы хотите очистить базу от лишней информации. Для удаления пользовательских полей используйте функцию delete_post_meta. Например, удалим альтернативный текст:
function wpbloger_delete_attachment_alt($attachment_id) {
delete_post_meta($attachment_id, '_wp_attachment_image_alt');
}
Если необходимо удалить сразу несколько ключей мета, можно использовать массив и цикл.
Удаление метаданных EXIF и других технических данных
WordPress автоматически сохраняет в метаданные вложения данные EXIF и размеры изображения в массиве _wp_attachment_metadata. Чтобы изменить или очистить эти данные, нужно получить массив, изменить и обновить:
function wpbloger_clear_attachment_metadata($attachment_id) {
update_post_meta($attachment_id, '_wp_attachment_metadata', array());
}
Будьте осторожны: очистка этого поля удалит все данные о размерах и ориентации, что может повлиять на отображение изображения.
Пример: массовое удаление альтернативного текста у всех изображений
Практическая задача — удалить alt-текст у всех изображений в библиотеке. Код:
function wpbloger_bulk_delete_all_alt_text() {
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1,
'post_status' => 'inherit',
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$attachment_id = get_the_ID();
delete_post_meta($attachment_id, '_wp_attachment_image_alt');
}
}
wp_reset_postdata();
}
// Вызов функции
wpbloger_bulk_delete_all_alt_text();
Этот код можно разместить в functions.php вашей темы или в отдельном плагине. После выполнения все alt-тексты у изображений будут удалены.
Советы по безопасности и резервному копированию
Перед массовыми изменениями метаданных медиафайлов обязательно сделайте резервную копию базы данных. Ошибки в коде или некорректные данные могут привести к потере важных данных и проблемам с отображением медиа. Для резервного копирования можно использовать плагин Clearfy Pro, который поможет сделать бэкап и оптимизировать сайт.
Проверка изменений на тестовом сайте
Перед применением кода на рабочем сайте рекомендуется протестировать изменения на локальном или тестовом сервере. Это позволит избежать сбоев и недоступности сайта.
Заключение
Работа с метаданными медиафайлов в WordPress на уровне кода позволяет гибко и быстро решать задачи по изменению и удалению данных без установки дополнительных плагинов. Используйте WP_Query для поиска вложений и стандартные функции update_post_meta, delete_post_meta, wp_update_post для управления метаданными. Не забывайте про безопасность, тестирование и резервное копирование.