В процессе эксплуатации сайта на WordPress в медиа-библиотеке накапливается множество устаревших и неиспользуемых файлов: изображения, видео, аудио и другие вложения. Они занимают место на сервере и могут замедлять работу сайта, особенно если хостинг ограничен по дисковому пространству. В этой статье разберёмся, как автоматически удалять старые медиа-файлы в WordPress, используя как готовые плагины, так и примеры кода для кастомных решений.
Почему важно удалять старые медиа-файлы в WordPress
WordPress не удаляет автоматически файлы, которые перестали использоваться в записях или страницах. В результате:
- место на сервере расходуется зря, что снижает производительность и увеличивает стоимость хостинга;
- резервные копии становятся больше, что замедляет процессы бэкапа;
- медиа-библиотека становится запутанной и неудобной для управления.
Удаление старых файлов помогает поддерживать чистоту базы данных и файловой системы, улучшая скорость сайта и удобство работы с медиа.
Как определить, какие медиа-файлы устарели
Ключевое — определить, какие файлы не используются в записях, страницах или других типах контента. Для этого нужно проверить связи файлов с постами и проверить дату загрузки.
Типичные подходы:
- Удаление файлов, не присоединённых ни к одному посту (orphaned media);
- Удаление файлов, которые не использовались в контенте в течение определённого времени (например, 6 месяцев);
- Удаление файлов по определённым метаданным или размерам.
Использование плагинов для автоматического удаления медиа-файлов
Существует несколько плагинов, которые помогают находить и удалять неиспользуемые медиа-файлы:
- Media Cleaner — анализирует базу данных и медиа-библиотеку, находит неиспользуемые файлы и предлагает их удалить. Есть как бесплатная версия, так и Pro с расширенными функциями.
- DNUI (Delete Not Used Image) — простой плагин для удаления изображений, не используемых на сайте.
- WPSClean — комплексный плагин для очистки базы данных и медиа.
Для интеграции с вашим сайтом на wplab.ru рекомендую попробовать Media Cleaner с расширенными настройками и возможностью автоматизации очистки.
Пример автоматического удаления старых медиа-файлов с помощью кода
Если вы хотите реализовать кастомное решение без плагинов, можно написать функцию, которая будет запускаться по расписанию и удалять медиа-файлы, неиспользуемые в записях и старше заданного срока.
Создание cron-задачи для удаления медиа-файлов
Ниже пример кода, который удаляет из библиотеки вложения старше 180 дней, если они не привязаны к постам или страницам.
function wplab_delete_old_unused_media() {
global $wpdb;
$days = 180; // количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID вложений, которые загружены раньше даты и не прикреплены к постам
$attachments = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s AND post_parent = 0",
$date_threshold
));
foreach ($attachments as $attachment_id) {
// Дополнительно проверим, не используется ли файл в контенте других постов
$file_url = wp_get_attachment_url($attachment_id);
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if (intval($count) === 0) {
wp_delete_attachment($attachment_id, true); // удаляем навсегда
}
}
}
// Регистрируем cron задачу на ежедневный запуск
if (!wp_next_scheduled('wplab_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wplab_daily_media_cleanup');
}
add_action('wplab_daily_media_cleanup', 'wplab_delete_old_unused_media');
Этот код проверяет все вложения старше 180 дней, которые не связаны напрямую с постами, и дополнительно ищет ссылки на файлы в содержимом всех постов. Если ссылка не найдена, файл удаляется.
Важные моменты и рекомендации
- Перед использованием такого кода обязательно сделайте полный бэкап сайта и базы данных.
- Будьте аккуратны с удалением, чтобы не удалить нужные файлы, например, если они используются в виджетах или настройках темы.
- Для более сложных сценариев можно расширить проверку, включая метаданные, пользовательские поля и другие типы контента.
Как интегрировать автоматическое удаление с плагином Clearfy Pro
Плагин Clearfy Pro предлагает инструменты по оптимизации и очистке базы данных, включая удаление неиспользуемых медиа. Вы можете комбинировать кастомный код и возможности Clearfy для комплексного решения.
В Clearfy можно настроить регулярный мониторинг медиа и запускать очистку в удобное время, что значительно упрощает задачу и снижает риск ошибок.
Лучшие практики для работы с медиа в WordPress
Для поддержания оптимальной работы с медиа в WordPress рекомендую придерживаться следующих советов:
- Регулярно проверяйте медиа-библиотеку на предмет неиспользуемых файлов;
- Используйте плагин для оптимизации изображений и автоматической очистки (например, Media Cleaner или Clearfy Pro);
- Автоматизируйте процесс с помощью cron-задач и кастомных функций;
- Обязательно создавайте резервные копии перед массовым удалением;
- Контролируйте размер и формат загружаемых файлов для экономии места.
Следуя этим рекомендациям, вы сможете поддерживать чистоту и производительность вашего сайта без лишних усилий.