В процессе ведения сайта на WordPress медиатека часто разрастается: картинки, видео и другие файлы, которые когда-то загружались, со временем перестают использоваться в контенте. Такие файлы занимают место на диске и могут негативно сказаться на производительности и скорости резервного копирования. В этой статье мы разберём, как автоматически находить и удалять неиспользуемые медиафайлы в WordPress с помощью готовых решений и собственных скриптов.
Почему важно удалять неиспользуемые медиафайлы
Медиатека WordPress не следит автоматически за тем, какие файлы используются на страницах и в записях. Из-за этого со временем накапливаются «мертвые» файлы. Их удаление помогает:
- Освободить пространство на сервере и ускорить работу хостинга.
- Оптимизировать скорость бэкапов и обновлений сайта.
- Снизить нагрузку при работе с медиатекой.
- Поддерживать порядок и удобство управления медиа.
Плагины для автоматического удаления неиспользуемых медиафайлов
Для тех, кто хочет быстро и без сложностей решить задачу, есть несколько полезных плагинов.
1. Media Cleaner
Один из самых популярных плагинов для поиска и удаления неиспользуемых медиафайлов. Он анализирует базу данных и контент, выявляет неиспользуемые объекты, а также проверяет файлы на сервере.
- Имеет бесплатную и PRO-версию с расширенными функциями.
- Поддерживает работу с плагинами WooCommerce и ACF.
- Позволяет создавать списки исключений и задавать правила удаления.
Скачать плагин можно на официальной странице.
2. WP-Optimize (модуль медиатеки)
Этот плагин известен как инструмент оптимизации базы данных, но в нем есть функция очистки медиатеки от неиспользуемых файлов. Преимущество — комплексный подход к оптимизации сайта.
Пример автоматизации удаления неиспользуемых медиафайлов через код
Если вы хотите реализовать кастомное решение без плагинов, можно написать скрипт, который будет проверять все файлы медиатеки и искать их использование в постах, страницах и метаданных.
Основная логика
1. Получаем список всех вложений (post_type = 'attachment').
2. Для каждого вложения проверяем, есть ли ссылки на него в контенте, метаданных и других местах.
3. Формируем список неиспользуемых файлов.
4. Удаляем их с помощью функции wp_delete_attachment().
Пример кода для поиска и удаления неиспользуемых медиафайлов
function wpkey_find_and_delete_unused_media() {
global $wpdb;
// Получаем все ID вложений
$attachments = get_posts([
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
'fields' => 'ids',
]);
foreach ($attachments as $attachment_id) {
$file_url = wp_get_attachment_url($attachment_id);
if (!$file_url) continue;
// Проверяем, встречается ли URL файла в контенте или метаданных
$like_url = '%' . $wpdb->esc_like($file_url) . '%';
$used_in_posts = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
$like_url
));
$used_in_meta = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
$like_url
));
if (intval($used_in_posts) === 0 && intval($used_in_meta) === 0) {
// Медиафайл не используется, удаляем
wp_delete_attachment($attachment_id, true);
echo 'Deleted unused media ID: ' . $attachment_id . "\n";
}
}
}
Этот код можно запускать из консоли WP-CLI или добавить в отдельный плагин для периодического запуска с помощью WP Cron. Обратите внимание, что он не проверяет использование в виджетах, настройках плагинов или кастомных таблицах — эти случаи требуют дополнительной кастомизации.
Как интегрировать автоматическую очистку в WP Cron
Чтобы не запускать код вручную, можно настроить автоматический запуск скрипта с определённым интервалом. Вот как добавить задачу в WP Cron:
function wpkey_schedule_media_cleanup() {
if (!wp_next_scheduled('wpkey_media_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpkey_media_cleanup_hook');
}
}
add_action('wp', 'wpkey_schedule_media_cleanup');
add_action('wpkey_media_cleanup_hook', 'wpkey_find_and_delete_unused_media');
Так будет запускаться функция очистки раз в неделю автоматически.
Рекомендации и меры предосторожности
Удаление медиафайлов — операция необратимая, поэтому важно:
- Перед запуском делать полный бэкап сайта и базы данных.
- Проверять список файлов перед удалением (можно сначала только выводить список без удаления).
- Учесть, что некоторые файлы могут использоваться плагинами, кастомными полями или темами — их проверка требует дополнительного анализа.
- Использовать проверенные плагины с возможностью восстановления удалённых файлов.
Заключение
Автоматическое удаление неиспользуемых медиафайлов помогает поддерживать чистоту и эффективность WordPress сайта. Для большинства пользователей оптимальным вариантом будет использование специализированных плагинов, таких как Media Cleaner с WPShop.ru. Для продвинутых разработчиков — кастомный код и автоматизация через WP Cron обеспечат гибкость и контроль.
Используйте предложенные методы аккуратно и регулярно очищайте медиатеку для стабильной работы сайта на WordPress.