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

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

Почему важно удалять устаревшие файлы из uploads

Со временем в wp-content/uploads накапливаются файлы, которые больше не используются в публикациях, темах или плагинах. Это могут быть старые изображения, временные файлы или резервные копии. Если их не удалять, то:

  • Увеличивается нагрузка на сервер из-за большого объема данных.
  • Резервное копирование занимает больше времени и места.
  • Сложнее управлять медиабиблиотекой и искать нужные файлы.

Автоматизация удаления позволяет держать папку uploads чистой и оптимизированной.

Способы автоматического удаления файлов из uploads

Существует несколько подходов к решению задачи:

  • Использование cron-задач и собственного кода.
  • Плагины для очистки медиабиблиотеки и папки uploads.
  • Комбинирование кода и плагинов для гибкости.

Как реализовать автоматическое удаление с помощью WP Cron

WP Cron – встроенный механизм планировщика задач в WordPress. Мы можем создать собственное событие, которое будет запускаться, например, раз в сутки и удалять файлы, которым больше заданного срока.

Пример кода для удаления файлов старше 30 дней

function wpupload_schedule_cleanup() {
    if (!wp_next_scheduled('wpupload_cleanup_event')) {
        wp_schedule_event(time(), 'daily', 'wpupload_cleanup_event');
    }
}
add_action('wp', 'wpupload_schedule_cleanup');

function wpupload_handle_cleanup() {
    $upload_dir = wp_upload_dir();
    $path = $upload_dir['basedir'];
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
    $now = time();
    $days_to_keep = 30;

    foreach ($files as $file) {
        if ($file->isFile()) {
            $file_path = $file->getRealPath();
            $file_mtime = $file->getMTime();
            if (($now - $file_mtime) > ($days_to_keep * DAY_IN_SECONDS)) {
                @unlink($file_path); // удаляем файл
            }
        }
    }
}
add_action('wpupload_cleanup_event', 'wpupload_handle_cleanup');

В этом коде мы ставим ежедневное задание wpupload_cleanup_event, которое проходит по папке uploads и удаляет файлы старше 30 дней. Обратите внимание, что @unlink используется для подавления ошибок удаления.

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

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

  • Получаем URL файла.
  • Проверяем таблицу wp_posts на наличие ссылок на этот файл.
  • Удаляем только если ссылки нет.

Это значительно снижает риск удаления нужных файлов.

Пример функции проверки использования файла

function wpupload_is_file_used($file_url) {
    global $wpdb;
    $like = '%' . $wpdb->esc_like($file_url) . '%';
    $query = $wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
        $like
    );
    $count = $wpdb->get_var($query);
    return $count > 0;
}

В основной функции удаления нужно вызывать эту проверку и удалять файлы только при отрицательном результате.

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

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

  • Clearfy Pro — в том числе умеет оптимизировать и чистить медиабиблиотеку.
  • Media Cleaner — находит и удаляет неиспользуемые файлы.
  • Force Delete — удаляет файлы и записи без ограничений.

Для настройки автоматического удаления старых файлов в плагинах обычно есть расписание или интеграция с WP Cron.

Советы по безопасности и резервному копированию

При автоматическом удалении важно:

  • Создавать резервные копии сайта и базы данных перед настройкой автоматической очистки.
  • Тестировать код на тестовом сервере или в локальной среде.
  • Логировать действия удаления для возможности восстановления при ошибках.
  • Не удалять файлы без проверки их использования, чтобы не сломать сайт.

Пример добавления логирования удаления

function wpupload_handle_cleanup_logged() {
    $upload_dir = wp_upload_dir();
    $path = $upload_dir['basedir'];
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
    $now = time();
    $days_to_keep = 30;
    $log = [];

    foreach ($files as $file) {
        if ($file->isFile()) {
            $file_path = $file->getRealPath();
            $file_mtime = $file->getMTime();
            if (($now - $file_mtime) > ($days_to_keep * DAY_IN_SECONDS)) {
                if (wpupload_is_file_used(str_replace(site_url('/'), '', $file_path))) {
                    continue;
                }
                if (@unlink($file_path)) {
                    $log[] = "Deleted: $file_path";
                } else {
                    $log[] = "Failed to delete: $file_path";
                }
            }
        }
    }
    if (!empty($log)) {
        error_log("[WPUpload Cleanup] " . implode(", ", $log));
    }
}
add_action('wpupload_cleanup_event', 'wpupload_handle_cleanup_logged');

Такой подход поможет отследить, что именно удалялось.

Заключение

Автоматическое удаление устаревших файлов из папки uploads – важная задача для оптимизации WordPress-сайта. Выбор решения зависит от навыков и требований: можно написать собственный WP Cron-скрипт, который учитывает использование файлов, или воспользоваться готовыми плагинами, например, Clearfy Pro. Обязательно делайте резервные копии и тестируйте на нерабочем сайте.

Как использовать фильтры для оптимизации загрузки файлов в WordPress
05.12.2025
Как удалить дубликаты файлов в медиабиблиотеке WordPress
09.03.2026
Строгий контроль остатков товаров в WooCommerce с уведомлениями
20.04.2026
Как автоматически удалять файлы из папки uploads в WordPress по сроку хранения
19.03.2026
Как добавить поддержку потоковой записи видео в WordPress
30.12.2025

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.