Автоматическое удаление старых файлов в медиатеке WordPress

В процессе работы с WordPress медиатека часто наполняется большим количеством устаревших и неиспользуемых файлов. Это приводит к росту размера базы данных и увеличению занимаемого места на сервере, что может негативно сказаться на производительности сайта и усложнить бэкап. В этой статье разберём, как автоматически удалять старые файлы из медиатеки WordPress, используя как кодовые решения, так и готовые плагины.

Почему важно регулярно чистить медиатеку WordPress

Медиатека — это хранилище всех загруженных изображений, аудио, видео и других файлов. С течением времени накапливаются файлы, которые уже не используются в контенте, например, удалённые изображения из постов, временные файлы или дубликаты. Их наличие приводит к:

  • Увеличению размера резервных копий и времени их создания.
  • Перегрузке хранилища сервера, что может привести к дополнительным расходам.
  • Замедлению работы сайта, особенно если используется медленная файловая система.
  • Сложностям при управлении контентом и поиске нужных файлов.

Регулярная очистка медиатеки помогает снизить нагрузку и поддерживать порядок в файловой системе.

Как определить старые и неиспользуемые файлы в медиатеке

Для автоматического удаления нужно точно определить, какие файлы считаются "старыми" или "неиспользуемыми". Чаще всего критериям соответствуют файлы:

  • Которые не прикреплены к записям, страницам или другим типам записей.
  • Которые не используются в содержимом (например, в тексте постов или виджетах).
  • Старше определённого срока (например, 6 месяцев или 1 год).

Для анализа можно использовать SQL-запросы, функции WordPress и специальные плагины.

Определение неиспользуемых файлов через WP_Query и поиск в контенте

Чтобы найти файлы, не привязанные к записям, можно использовать следующий код:

function wpstandart_get_unused_attachments($older_than_days = 180) {
  global $wpdb;
  $date_limit = date('Y-m-d H:i:s', strtotime("-{$older_than_days} days"));
  $query = $wpdb->prepare(
    "SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s",
    $date_limit
  );
  $attachments = $wpdb->get_results($query);
  $unused = [];

  foreach ($attachments as $attachment) {
    $used_in_posts = $wpdb->get_var($wpdb->prepare(
      "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
      '%'.basename($attachment->guid).'%'
    ));
    if ($used_in_posts == 0) {
      $unused[] = $attachment;
    }
  }

  return $unused;
}

Этот код возвращает список вложений старше 180 дней, которые не используются в содержимом сайта.

Автоматическое удаление старых файлов: пример функции

После определения неиспользуемых файлов можно удалить их программно. Ниже пример функции, которая удаляет такие файлы и их метаданные:

function wpstandart_delete_old_unused_attachments() {
  $unused_attachments = wpstandart_get_unused_attachments(180);
  foreach ($unused_attachments as $attachment) {
    wp_delete_attachment($attachment->ID, true);
  }
}

// Запускаем очистку через WP-Cron раз в неделю
if (!wp_next_scheduled('wpstandart_weekly_clean_media')) {
  wp_schedule_event(time(), 'weekly', 'wpstandart_weekly_clean_media');
}
add_action('wpstandart_weekly_clean_media', 'wpstandart_delete_old_unused_attachments');

Эта функция удаляет все медиафайлы, которые не используются и старше 180 дней, а расписание WP-Cron запускает её автоматически каждую неделю.

Плагины для автоматической очистки медиатеки WordPress

Если вы не хотите писать код, можно использовать готовые плагины, в том числе из коллекции WPShop, или сторонние решения:

  • Media Cleaner (https://wpshop.ru/plugins/media-cleaner/?utm_source=wpstandart.ru&utm_medium=article&utm_campaign=avtomaticheskoe-udaleniye-starogo-mediateki-wordpress) — проверяет медиатеку на неиспользуемые файлы и позволяет удалять их безопасно.
  • WP-Optimize — Clean, Compress, Cache — плагин с функцией оптимизации базы данных и очистки медиа.
  • Force Regenerate Thumbnails — помогает восстанавливать миниатюры, а также удалять старые версии изображений.

При использовании плагинов стоит тестировать их на тестовом сайте, чтобы избежать случайного удаления нужных файлов.

Интеграция с WP-Cron и безопасность

Автоматизация с помощью WP-Cron позволяет запускать очистку в фоновом режиме. Однако важно:

  • Ограничить запуск функции только для администраторов или через безопасный Cron-запрос.
  • Делать резервные копии перед удалением.
  • Проверять, что удаляемые файлы действительно не используются.

Расширенное решение: очистка временных и кешированных файлов

Помимо медиафайлов, в WordPress могут накапливаться временные изображения и кешированные данные, которые можно очищать аналогично:

  • Файлы миниатюр, созданные плагинами визуальных редакторов.
  • Временные файлы от плагинов загрузки и оптимизации изображений.
  • Старые версии изображений, созданные плагинами типа Imagify или Smush.

Для очистки временных файлов можно использовать WP-CLI команды или плагины, например, Clearfy Pro с расширенными функциями очистки.

Пример удаления временных файлов миниатюр через код

function wpstandart_delete_old_thumbnails() {
  $upload_dir = wp_upload_dir();
  $dir = $upload_dir['basedir'];

  $files = glob($dir . '/**/*-150x150.*', GLOB_BRACE);
  $now = time();
  foreach ($files as $file) {
    if (is_file($file)) {
      $file_time = filemtime($file);
      if ($now - $file_time > 60*60*24*30) { // старше 30 дней
        unlink($file);
      }
    }
  }
}

Эта функция удалит все миниатюры размера 150x150 пикселей, которые не обновлялись более 30 дней.

Выводы и рекомендации

Регулярное автоматическое удаление старых и неиспользуемых файлов медиатеки — важная задача для поддержания чистоты и производительности WordPress-сайта. Обязательно тестируйте кодовые решения и плагины на тестовом окружении, создавайте резервные копии и тщательно проверяйте, что удаляется только действительно ненужный контент. Использование WP-Cron позволяет полностью автоматизировать процесс и экономить время.

Автообновление плагинов WordPress без риска: настройка и контроль
13.01.2026
Как повысить производительность WooCommerce при большом количестве товаров
26.05.2026
Как автоматически отключить отклик AJAX в WooCommerce без потери функциональности
23.06.2026
Как удалить или скрыть адреса постов в WordPress
02.02.2026
Как автоматически очистить WooCommerce от незаконченных заказов
30.06.2026