Любой сайт на WordPress со временем накапливает большое количество медиафайлов — изображений, видео, аудио и других вложений. Многие из них перестают использоваться: картинки удалённых постов, черновики, временные файлы и пр. Такие неиспользуемые медиафайлы занимают место на сервере, замедляют резервное копирование и ухудшают производительность. В этой статье рассмотрим, как автоматически находить и удалять неиспользуемые медиафайлы в WordPress с помощью плагинов и кастомного кода.
Почему важно удалять неиспользуемые медиафайлы в WordPress
Медиафайлы — это часто самые «тяжёлые» элементы сайта. Со временем их число может вырасти до тысяч, даже если они уже не нужны. Основные проблемы неиспользуемых медиаданных:
- Занятое место на диске: лишние файлы увеличивают размер бэкапов и требуют больше дискового пространства.
- Потеря производительности: хоть сам WordPress напрямую не тормозит, но операции с большим числом файлов (например, резервное копирование, сканирование безопасности) занимают больше времени.
- Путаница и сложность управления: тяжело ориентироваться в медиатеке, если там много мусора.
Регулярное удаление неиспользуемых файлов помогает содержать сайт в порядке и экономит ресурсы.
Плагины для автоматического поиска и удаления неиспользуемых медиафайлов
В каталоге WordPress доступно несколько плагинов, которые помогают решать эту задачу. Вот самые популярные и эффективные:
1. Media Cleaner
Один из лучших плагинов для поиска неиспользуемых медиафайлов. Он сканирует библиотеку и контент сайта, чтобы определить, какие файлы не используются ни в каких записях, страницах, виджетах или метаданных.
- Поддерживает работу с популярными плагинами и конструкторами страниц.
- Позволяет безопасно удалять файлы или перемещать их в карантин.
- Имеет платную версию с расширенными возможностями.
Скачать и узнать подробнее можно на официальной странице плагина.
2. WP-Optimize
Этот плагин более универсальный, но включает функцию очистки неиспользуемых медиафайлов. WP-Optimize позволяет удалять временные файлы, оптимизировать базу данных и очищать медиатеку от мусора.
3. DNUI (Delete Not Used Image)
Простой и бесплатный плагин, который ищет изображения, не вставленные в контент. Подходит для небольших сайтов без сложных конструкторов страниц.
Как написать свой скрипт для удаления неиспользуемых медиафайлов в WordPress
Если нужен кастомный подход или автоматизация под свои задачи, можно написать функцию, которая будет проверять каждое вложение и удалять те, что не используются.
Основной принцип — перебрать вложения из медиатеки, проверить, встречается ли URL файла в базе данных (в постах, метаданных и т.д.), и если нет — удалить.
Пример функции wpdeveloper_delete_unused_media()
function wpdeveloper_delete_unused_media() {
global $wpdb;
// Получаем все вложения
$attachments = get_posts(array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
));
foreach ($attachments as $attachment) {
$url = wp_get_attachment_url($attachment->ID);
$url_escaped = esc_sql($url);
// Ищем встречается ли URL в содержимом постов и метаданных
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
if ($count == 0) {
// Проверяем метаданные
$meta_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
if ($meta_count == 0) {
// Удаляем файл вместе с записью
wp_delete_attachment($attachment->ID, true);
error_log('Удалён неиспользуемый файл: ' . $url);
}
}
}
}Эту функцию можно вызвать вручную или по крону для регулярного удаления неиспользуемых медиафайлов.
Как избежать ошибок и потерь важных файлов при удалении
Удаление медиафайлов — задача деликатная, поскольку можно случайно удалить файлы, которые используются нестандартно (например, через JavaScript, внешние плагины, кастомные поля).
Чтобы минимизировать риски:
- Делайте резервные копии перед массовым удалением.
- Используйте плагины с карантином (например, Media Cleaner), чтобы сначала проверить список файлов.
- Тестируйте скрипты на копии сайта или в безопасной среде.
- Проверяйте логи, чтобы понять, какие файлы были удалены.
Автоматизация процесса: запуск по расписанию через WP-Cron
Чтобы регулярно очищать медиатеку, можно настроить запуск функции удаления по расписанию.
function wpdeveloper_schedule_media_cleanup() {
if (!wp_next_scheduled('wpdeveloper_media_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpdeveloper_media_cleanup_hook');
}
}
add_action('wp', 'wpdeveloper_schedule_media_cleanup');
add_action('wpdeveloper_media_cleanup_hook', 'wpdeveloper_delete_unused_media');Этот код добавляет ежедневный запуск функции wpdeveloper_delete_unused_media. Такой подход позволяет поддерживать медиатеку в чистоте без ручного вмешательства.
Выводы и рекомендации
Автоматическое удаление неиспользуемых медиафайлов — важный этап технического обслуживания сайта на WordPress. Плагины, такие как Media Cleaner, значительно упрощают процесс и минимизируют риски. Если нужна кастомизация, можно использовать собственные функции с проверкой использования файлов в базе данных.
Обязательно делайте резервные копии и тестируйте любые удаления, чтобы не потерять важные данные. Регулярное поддержание медиатеки помогает ускорить сайт и упростить администрирование.
Для удобной работы с сайтом на WordPress рекомендую ознакомиться с плагином Clearfy Pro, который содержит множество функций по оптимизации и очистке сайта, включая работу с медиа.