С течением времени в медиа-библиотеке WordPress накапливается большое количество файлов, многие из которых уже не используются в записях или страницах. Это может привести к увеличению размера сайта, замедлению работы и усложнению резервного копирования. В этой статье разберём, как автоматизировать удаление старых и неиспользуемых медиафайлов, чтобы поддерживать ваш сайт в порядке и повысить производительность.
Почему важно удалять старые медиафайлы в WordPress
Медиафайлы занимают значительный объём на сервере, особенно если на сайте много изображений, видео или документов. С течением времени многие из них перестают использоваться — например, если вы удалили страницу, в которой было вставлено изображение, или заменили его на новое. Такие файлы продолжают занимать место и могут мешать работе сайта.
Удаление неиспользуемых медиафайлов помогает:
- Снизить нагрузку на диск и сервер;
- Уменьшить объём резервных копий;
- Повысить скорость загрузки сайта;
- Сделать управление медиа удобнее и быстрее.
Как определить неиспользуемые медиафайлы
Сначала нужно понять, какие файлы не подключены к контенту. В WordPress нет встроенного инструмента для этого, но можно использовать плагины или написать собственный код.
Самые популярные плагины для поиска неиспользуемых медиафайлов:
- Media Cleaner — сканирует библиотеку и показывает файлы, которые не используются в записях.
- Clearfy Pro — включает расширенные возможности по оптимизации, в том числе управление медиа.
Если хотите автоматизировать процесс и контролировать удаление программно, можно использовать следующий подход.
Автоматизация удаления старых медиафайлов с помощью кода
Разработаем функцию, которая будет находить изображения, не привязанные к записям и не используемые в контенте, и удалять их. Для безопасности добавим ограничения по дате — удалять только файлы старше определённого срока (например, 6 месяцев).
Шаг 1. Поиск неиспользуемых медиафайлов
Для этого мы проверим все вложения типа image и сверим их с контентом сайта.
function wpguest_find_unused_media() {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime('-6 months'));
// Получаем все ID вложений-изображений старше 6 месяцев
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID, post_content FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
$date_limit
));
$unused = [];
foreach ($attachments as $attachment) {
$id = $attachment->ID;
// Проверяем прикрепление к родительскому посту
$parent_id = get_post_field('post_parent', $id);
if ($parent_id) {
continue; // используется в родительском посте
}
// Проверяем использование в контенте сайта
$url = wp_get_attachment_url($id);
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
if (!$count) {
$unused[] = $id;
}
}
return $unused;
}
Шаг 2. Удаление найденных файлов
Теперь реализуем функцию удаления по ID с использованием стандартной функции WordPress wp_delete_attachment, которая корректно удалит все размеры изображения и все связанные данные.
function wpguest_delete_unused_media() {
$unused = wpguest_find_unused_media();
$deleted = 0;
foreach ($unused as $attachment_id) {
if (wp_delete_attachment($attachment_id, true)) {
$deleted++;
}
}
return $deleted;
}
Шаг 3. Автоматизация через WP-Cron
Чтобы не запускать процесс вручную, подключим регулярное задание, которое будет запускать удаление раз в месяц.
add_action('wpguest_monthly_media_cleanup', 'wpguest_delete_unused_media');
if (!wp_next_scheduled('wpguest_monthly_media_cleanup')) {
wp_schedule_event(time(), 'monthly', 'wpguest_monthly_media_cleanup');
}
Такой подход поможет держать медиа-библиотеку в чистоте без вашего постоянного участия.
Дополнительные советы по управлению медиафайлами в WordPress
Используйте специализированные плагины
Если вы не хотите писать код или боитесь ошибиться, можно использовать готовые решения, например, Media Cleaner — он сканирует сайт и предлагает удалить неиспользуемые файлы с возможностью восстановления.
Регулярно проверяйте медиафайлы перед удалением
Всегда делайте резервную копию перед массовым удалением и проверяйте, что файлы действительно не используются. Иногда картинки могут быть подключены в нестандартных местах или через кастомные поля.
Оптимизируйте изображения при загрузке
Для снижения объёма медиа используйте плагины оптимизации, например, Clearfy Pro — он умеет автоматически сжимать и оптимизировать изображения при загрузке, что снижает нагрузку на сервер.
Заключение по теме удаления старых медиафайлов
Автоматизация удаления старых и неиспользуемых медиафайлов в WordPress — важная задача для поддержания производительности и порядка на сайте. Используйте предложенный пример кода или проверенные плагины, чтобы регулярно чистить библиотеку медиа. Это поможет экономить место на сервере, ускорит работу сайта и упростит управление контентом.