Если ваш сайт на WordPress существует достаточно давно и активно наполняется контентом, со временем в медиатеке накапливается множество файлов, которые уже не используются на страницах или в записях. Это не только занимает лишнее место на сервере, но и может замедлять работу сайта при бэкапах и индексировании. В этой статье мы подробно разберем, как можно автоматизировать процесс поиска и удаления таких неиспользуемых медиафайлов — с помощью готовых плагинов и собственного кода.
Почему важно удалять неиспользуемые медиафайлы в WordPress
Медиатека WordPress — это хранилище всех загруженных на сайт файлов: изображений, видео, документов. Когда контент удаляется или меняется, ссылки на эти файлы могут пропадать, но сами файлы остаются в системе. В итоге:
- Занимается дисковое пространство хостинга.
- Увеличивается время создания резервных копий.
- Снижается производительность сайта при работе с медиатекой.
- Появляется риск путаницы при обновлении или миграции сайта.
Регулярная очистка от неиспользуемых файлов — часть поддержания чистоты и эффективности WordPress-сайта.
Обзор популярных плагинов для удаления неиспользуемых медиафайлов
Плагин Media Cleaner
Media Cleaner — один из самых популярных плагинов для очистки медиатеки. Он сканирует страницы, записи, кастомные типы записей, чтобы найти ссылки на медиафайлы и выявить неиспользуемые.
- Имеет бесплатную и профессиональную версию.
- Поддерживает работу с плагинами WooCommerce, ACF и другими.
- Позволяет создавать резервные копии перед удалением.
Единственный минус — требует осторожности при работе с файлами, используемыми динамически через кастомный код.
Плагин WP-Optimize
Хотя WP-Optimize известен больше как плагин для оптимизации базы данных и кэша, он также имеет функцию очистки неиспользуемых медиафайлов. Это удобный вариант для тех, кто уже использует WP-Optimize.
- Простая интеграция с остальными функциями оптимизации.
- Автоматизация очистки по расписанию (в версии Pro).
Автоматизация удаления неиспользуемых медиафайлов через код
Если вы хотите более гибко управлять процессом очистки и интегрировать его в свои рабочие процессы, можно написать собственный скрипт на PHP, который будет:
- Поискать в базе данных все медиафайлы (attachment).
- Проверить, используются ли эти файлы в контенте сайта.
- Удалить те, которые не найдены в записях или метаданных.
Пример функции для поиска неиспользуемых медиафайлов
function wpfreecourses_find_unused_media() {
global $wpdb;
// Получаем все ID вложений
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
$unused = [];
foreach ($attachments as $att_id) {
$file = get_attached_file($att_id);
if (!$file) continue;
// Ищем в содержимом записей ссылки на этот файл
$file_url = wp_get_attachment_url($att_id);
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($count == 0) {
$unused[] = $att_id;
}
}
return $unused;
}
Эта функция возвращает массив ID вложений, которые не найдены ни в одном посте или странице.
Удаление неиспользуемых файлов с подтверждением
function wpfreecourses_delete_unused_media() {
$unused = wpfreecourses_find_unused_media();
foreach ($unused as $att_id) {
wp_delete_attachment($att_id, true); // true — удалять физический файл
}
}
Рекомендуется запускать такую функцию вручную или по крону после создания резервной копии, чтобы избежать случайной потери нужных файлов.
Как интегрировать очистку медиафайлов в автоматические задачи WordPress
Для периодического запуска очистки можно использовать WP-Cron. Пример регистрации задачи:
add_action('wpfreecourses_daily_cleanup', 'wpfreecourses_delete_unused_media');
if (!wp_next_scheduled('wpfreecourses_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpfreecourses_daily_cleanup');
}
Такой подход позволит автоматически очищать медиатеку раз в сутки без вашего участия.
Особенности и рекомендации по работе с неиспользуемыми медиафайлами
Перед тем как запускать автоматическую очистку, необходимо учесть несколько моментов:
- Динамически подключаемые медиафайлы (например, через ACF, кастомные поля, плагины) могут не отображаться напрямую в post_content — их нужно проверять отдельно.
- Создавайте резервные копии сайта и базы данных перед удалением.
- Тестируйте скрипты на тестовом стенде, чтобы избежать потери важных данных.
- Используйте профессиональные решения, если сайт сложный и содержит много кастомных связей.
Заключение
Автоматизация удаления неиспользуемых медиафайлов — важная задача для владельцев WordPress-сайтов, которые хотят поддерживать чистоту и скорость работы своего ресурса. Используя плагины, такие как Media Cleaner, или собственные функции, вы сможете эффективно очистить медиатеку и освободить место на сервере.