Зачем автоматизировать удаление старых медиафайлов в WordPress
С течением времени в медиабиблиотеке WordPress накапливается огромное количество файлов: изображения, видео, документы. Многие из них устаревают, перестают использоваться на сайте, но продолжают занимать место на сервере, увеличивая размер бэкапов и замедляя работу сайта. Автоматизация удаления таких файлов помогает поддерживать порядок, экономить дисковое пространство и ускорять бэкапы.
Ручной поиск и удаление старых медиафайлов — трудоемкий процесс, особенно на крупных сайтах. Поэтому полезно настроить систему, которая будет автоматически находить и удалять медиафайлы, не используемые в записях, и старше определенного периода.
Как определить, какие медиафайлы можно удалить
Перед удалением важно убедиться, что файл не используется на сайте. Простой способ — проверить, есть ли ссылки на файл в записях, страницах, кастомных типах записей и виджетах. Кроме того, стоит учитывать дату загрузки — медиафайлы, не используемые и загруженные более 6-12 месяцев назад, с большой вероятностью можно удалить.
Также нужно учитывать, что некоторые плагины (например, страницы конструктора или слайдеры) могут использовать медиафайлы нестандартно, поэтому проверка должна учитывать эти особенности.
Плагины для автоматического удаления старых медиафайлов
Есть несколько полезных плагинов, которые помогают с автоматическим удалением или идентификацией неиспользуемых медиафайлов:
- Media Cleaner — анализирует базу данных и файловую систему, выявляет неиспользуемые медиафайлы и позволяет удалять их безопасно. Есть бесплатная версия и PRO с поддержкой кастомных типов записей.
- WP-Optimize — помимо очистки базы данных, умеет искать и удалять неиспользуемые изображения. Удобно комбинировать с оптимизацией сайта.
- DNUI (Delete Not Used Image) — простой плагин для удаления неиспользуемых изображений, но с меньшим функционалом по сравнению с Media Cleaner.
Для автоматизации удаления можно поставить задачу WP-Cron для периодического запуска очистки с помощью этих плагинов.
Пример кода для автоматического удаления старых медиафайлов через WP-Cron
Ниже пример, как с помощью собственного кода и WP-Cron можно удалять медиафайлы старше 180 дней, которые не прикреплены к записям и не используются в контенте.
/**
* WPDetect: Функция для удаления старых неиспользуемых медиафайлов
*/
function wpdetect_delete_old_unused_media() {
global $wpdb;
$days = 180; // Возраст файла в днях
$date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID вложений старше $days дней
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID, post_mime_type FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s",
$date_limit
));
foreach ($attachments as $attachment) {
$id = $attachment->ID;
// Проверяем, прикреплено ли вложение к посту
$parent_id = wp_get_post_parent_id($id);
if ($parent_id) {
continue; // Вложение используется
}
// Проверяем, используется ли файл в контенте других записей
$file_url = wp_get_attachment_url($id);
if (!$file_url) {
continue;
}
$like = '%' . $wpdb->esc_like($file_url) . '%';
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
$like
));
if ($count == 0) {
// Удаляем медиафайл без перемещения в корзину
wp_delete_attachment($id, true);
}
}
}
// Регистрация WP-Cron задачи
if (!wp_next_scheduled('wpdetect_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpdetect_daily_media_cleanup');
}
add_action('wpdetect_daily_media_cleanup', 'wpdetect_delete_old_unused_media');Этот скрипт ежедневно проверяет медиафайлы старше 180 дней, не прикрепленные к записям и не используемые в содержимом сайта, и удаляет их. Благодаря этому можно автоматически освобождать место без ручного контроля.
Рекомендации по безопасности и резервному копированию
Перед внедрением автоматического удаления обязательно настройте регулярные бэкапы сайта и базы данных, чтобы избежать потери важных данных. Для автоматизации бэкапов можно использовать плагин WPDetect Backup или другие решения.
Также рекомендуется тестировать скрипты и плагины на тестовой копии сайта, чтобы избежать случайного удаления нужных файлов.
Оптимизация работы медиабиблиотеки и WP-Cron
Регулярное удаление старых медиафайлов снижает нагрузку на базу данных и файловый сервер. Для повышения производительности сайта рекомендуется:
- Настроить качественный хостинг с SSD-дисками;
- Использовать плагины кеширования и оптимизации изображений;
- Проверять WP-Cron на предмет сбоев и при необходимости заменить системным cron на сервере;
- Использовать плагин Clearfy Pro для оптимизации и отключения ненужных функций WordPress.
Заключение
Автоматизация удаления старых медиафайлов — важная часть поддержки чистоты и производительности WordPress-сайта. Используя готовые плагины и собственные скрипты с WP-Cron, можно эффективно избавляться от мусора, освобождая место и ускоряя работу сайта. Главное — тщательно тестировать и не забывать про резервные копии.