В WordPress при загрузке новых версий изображений или других медиафайлов, особенно если вы используете плагины для оптимизации или редакторы изображений, часто остаются старые версии файлов, которые продолжают занимать дисковое пространство. Со временем это может привести к значительному увеличению объема хранилища и замедлению работы сайта при резервном копировании и миграциях. В этой статье разберем, как автоматизировать удаление старых версий медиафайлов, оптимизируя хранение без потери актуальных данных.
Почему в WordPress появляются старые версии медиафайлов
При редактировании изображений через встроенный редактор WordPress создаются копии старых файлов — версии с разными размерами и именами. Плагины для оптимизации изображений, например, Imagify или EWWW Image Optimizer, тоже могут создавать временные файлы и резервные копии.
Кроме того, при загрузке новых версий файлов с тем же именем WordPress сохраняет предыдущие файлы в папке uploads, чтобы избежать потери данных.
Все эти файлы накапливаются и не удаляются автоматически, что требует ручного вмешательства или автоматизации процесса удаления.
Как автоматически удалять старые версии медиафайлов — обзор подходов
Существует несколько способов решения задачи автоматического удаления устаревших медиафайлов:
- Использование специальных плагинов для очистки и оптимизации медиа-библиотеки;
- Написание собственного кода для удаления файлов, не привязанных к текущим записям в базе данных;
- Использование WP-CLI команд для поиска и удаления неиспользуемых файлов;
- Комбинация всех вышеперечисленных методов с регулярным запуском через WP-Cron.
Далее рассмотрим практические примеры для каждого из вариантов.
Плагины для очистки медиа-библиотеки
Одним из самых популярных плагинов для управления медиа является Media Cleaner. Он сканирует библиотеку и определяет неиспользуемые и дублирующие файлы, позволяя удалить их безопасно.
Плагин умеет работать с различными типами контента и поддерживает интеграцию с популярными конструкторами страниц и плагинами.
Однако для автоматического удаления старых версий можно настроить WP-Cron задачу, которая будет запускать проверку и удалять файлы по расписанию.
Создание собственного скрипта удаления старых версий
Если требуется точечное и гибкое решение, можно написать функцию, которая будет искать файлы в папке uploads, не связанные с активными записями, и удалять их.
Пример функции с префиксом wpcontent:
function wpcontent_delete_old_media_versions() {
global $wpdb;
// Получаем все ID вложений
$attachment_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
// Получаем пути к файлам вложений
$used_files = [];
foreach ($attachment_ids as $id) {
$file = get_attached_file($id);
if ($file) {
$used_files[] = realpath($file);
}
}
// Путь к папке uploads
$upload_dir = wp_upload_dir();
$upload_path = realpath($upload_dir['basedir']);
// Рекурсивно сканируем папку uploads
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($upload_path));
foreach ($rii as $file) {
if ($file->isDir()) continue;
$filepath = $file->getRealPath();
// Если файл не используется (не в списке attach файлов)
if (!in_array($filepath, $used_files)) {
// Проверяем, что файл - изображение или медиа
$ext = strtolower(pathinfo($filepath, PATHINFO_EXTENSION));
$allowed_exts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'mp4', 'mp3', 'pdf'];
if (in_array($ext, $allowed_exts)) {
// Удаляем файл
unlink($filepath);
}
}
}
}
Эту функцию можно запускать вручную или настраивать как событие WP-Cron:
if (!wp_next_scheduled('wpcontent_cron_delete_old_media')) {
wp_schedule_event(time(), 'daily', 'wpcontent_cron_delete_old_media');
}
add_action('wpcontent_cron_delete_old_media', 'wpcontent_delete_old_media_versions');
Рекомендации по безопасному удалению и резервному копированию
Удаление файлов из медиа-библиотеки требует осторожности. Перед автоматическим удалением старых версий обязательно делайте резервные копии сайта и базы данных.
Для дополнительной безопасности можно реализовать перемещение устаревших файлов в отдельную папку на сервере вместо немедленного удаления, что позволит проверить корректность работы скрипта и избежать потерь.
Рекомендуется также проверять логи сервера и ошибок WordPress для мониторинга процесса удаления.
Обзор альтернативных плагинов и инструментов
Помимо Media Cleaner, есть другие полезные плагины и сервисы:
- WP-Optimize — плагин для очистки базы данных и медиа;
- Force Regenerate Thumbnails — позволяет удалить старые миниатюры и регенерировать их заново;
- WP-CLI — удобный инструмент для администрирования через командную строку, с помощью которого можно писать скрипты для поиска и удаления неиспользуемых файлов;
- Clearfy Pro — предлагает расширенные возможности оптимизации, включая управление медиафайлами.
Для интеграции с WP-CLI можно создать кастомную команду, например:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wpcontent clean-media', function() {
wpcontent_delete_old_media_versions();
WP_CLI::success('Очистка старых версий медиа завершена.');
});
}
Заключение
Автоматическое удаление старых версий медиафайлов — важная задача для поддержания производительности и экономии дискового пространства в WordPress. Используйте готовые плагины, если хотите быстро получить результат, или пишите собственные решения для большей гибкости и контроля.
Настройка WP-Cron для регулярного запуска очистки поможет поддерживать порядок в медиа-библиотеке без ручного вмешательства.
Посетите Media Cleaner на wpshop.ru для удобного и безопасного управления медиафайлами на вашем сайте.