В процессе работы на сайте WordPress медиа библиотека часто разрастается, и в ней накапливаются файлы, которые уже не используются и занимают место на сервере. Особенно это актуально для сайтов с большим количеством изображений, аудио и видеофайлов. Ручное удаление таких файлов занимает много времени и требует аккуратности, чтобы не удалить нужные материалы.
Зачем нужно автоматическое удаление неиспользуемых файлов
Автоматизация удаления старых и неиспользуемых файлов медиа библиотеки позволяет:
- Сэкономить место на диске и снизить нагрузку на сервер.
- Упростить управление медиа контентом.
- Уменьшить время резервного копирования и ускорить работу сайта.
В WordPress нет встроенного функционала для автоматического поиска и удаления неиспользуемых медиафайлов, поэтому приходится использовать дополнительные плагины или писать собственные решения.
Использование плагинов для удаления неиспользуемых файлов
Существует несколько плагинов, которые позволяют найти и удалить неиспользуемые изображения и другие файлы:
- Media Cleaner — один из самых популярных плагинов. Он сканирует базу данных и файлы, определяя, какие изображения не используются в записях, страницах, виджетах и плагинах.
- DNUI (Delete Not Used Image) — простой и эффективный плагин, который ищет неиспользуемые изображения и позволяет их удалять.
- WP-Optimize — комплексный плагин для оптимизации базы данных и медиа файлов, есть функция удаления неиспользуемых изображений.
Однако такие плагины иногда могут ошибочно удалять нужные файлы, если они используются нестандартным образом (например, вставлены через кастомный код). Поэтому важно делать резервные копии перед использованием.
Автоматизация удаления старых медиа файлов на основе даты загрузки
Если нужно удалять файлы старше определённого срока вне зависимости от их использования, можно реализовать это через собственный код. Ниже пример функции для удаления медиафайлов, загруженных более 180 дней назад.
Этот код можно добавить в файл functions.php вашей темы или в отдельный плагин.
function wpzoom_delete_old_media_files() {
$days = 180; // Количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$old_attachments = get_posts($args);
foreach ($old_attachments as $attachment_id) {
// Проверка, используется ли файл в записях
$is_used = wpzoom_check_media_usage($attachment_id);
if (! $is_used) {
wp_delete_attachment($attachment_id, true); // Полное удаление
}
}
}
function wpzoom_check_media_usage($attachment_id) {
global $wpdb;
$file = get_attached_file($attachment_id);
if (! $file) {
return false;
}
$file_name = basename($file);
// Поиск использования файла в постах
$query = $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_content LIKE %s LIMIT 1",
'%' . $wpdb->esc_like($file_name) . '%'
);
$result = $wpdb->get_var($query);
return ! is_null($result);
}
// Запуск удаления по крону (пример: раз в неделю)
add_action('wp_scheduled_delete_old_media', 'wpzoom_delete_old_media_files');
if (! wp_next_scheduled('wp_scheduled_delete_old_media')) {
wp_schedule_event(time(), 'weekly', 'wp_scheduled_delete_old_media');
}В этом примере функция wpzoom_delete_old_media_files получает все вложения (медиафайлы), загруженные более 180 дней назад, и проверяет, используются ли они в контенте. Если нет — удаляет. Проверка реализована в wpzoom_check_media_usage, которая ищет имя файла в содержимом всех записей.
Особенности и рекомендации по автоматическому удалению
При автоматическом удалении медиафайлов важно учитывать:
- Некоторые файлы могут использоваться в виджетах, кастомных полях, настройках плагинов — простая проверка по содержимому постов не всегда достаточно точна.
- Резервное копирование перед удалением — обязательно.
- Гибкость настройки — можно расширить проверку на использование в метаданных, настройках тем и плагинов.
- Добавление уведомлений и логирования удалённых файлов поможет контролировать процесс.
Интеграция с плагинами WPShop
Если вы используете на сайте плагин Clearfy Pro, то там есть встроенные инструменты для оптимизации базы данных и очистки медиа библиотеки. Clearfy умеет находить и удалять неиспользуемые медиафайлы с удобным интерфейсом и с возможностью исключений.
Для сайтов с большим количеством отзывов и оценок, например, с плагином Expert Review, важно не удалить файлы, связанные с отзывами, поэтому автоматическую очистку лучше настраивать с учётом специфики используемых плагинов.
Выводы и лучшие практики
Автоматическое удаление старых и неиспользуемых медиафайлов помогает поддерживать сайт в порядке и экономить ресурсы. Лучший подход — комбинировать автоматические скрипты с проверенными плагинами и всегда иметь резервные копии. Если на сайте много сложных кастомизаций, стоит дополнительно тестировать работу удаления на тестовом сервере.
Используя приведённый код и рекомендации, вы сможете настроить регулярную очистку медиа библиотеки без риска случайного удаления нужных файлов.