Автоматическое удаление старого медиаконтента в WordPress по дате загрузки

Диагностика проблемы: зачем удалять старый медиаконтент

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

Как определить, какие файлы следует удалять

Для автоматизации удаления стоит ориентироваться не только на дату загрузки, но и на использование файлов в записях, постах, товарах WooCommerce или других кастомных типах записей. Однако, если задача — удалить все файлы, загруженные более N месяцев назад, и при этом не анализировать их использование, это можно сделать относительно просто.

Пример выборки файлов по дате загрузки

global $wpdb;
$months = 6; // Кол-во месяцев для хранения
$time_limit = date('Y-m-d H:i:s', strtotime("-{$months} months"));

$old_attachments = $wpdb->get_results($wpdb->prepare(
    "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s",
    $time_limit
));

Пошаговое решение: скрипт для автоматического удаления

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

Код функции удаления старого медиаконтента

function wpupload_delete_old_attachments() {
    global $wpdb;
    $months = 6; // Укажите количество месяцев для хранения
    $time_limit = date('Y-m-d H:i:s', strtotime("-{$months} months"));

    $old_attachments = $wpdb->get_results($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s",
        $time_limit
    ));

    foreach ($old_attachments as $attachment) {
        // Удаляем вложение с возвратом результата
        wp_delete_attachment($attachment->ID, true); // true — навсегда, без корзины
    }
}

// Регистрация события в WP-Cron
if (!wp_next_scheduled('wpupload_delete_old_attachments_event')) {
    wp_schedule_event(time(), 'daily', 'wpupload_delete_old_attachments_event');
}

add_action('wpupload_delete_old_attachments_event', 'wpupload_delete_old_attachments');

Как добавить активацию и деактивацию при инициализации плагина

register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('wpupload_delete_old_attachments_event')) {
        wp_schedule_event(time(), 'daily', 'wpupload_delete_old_attachments_event');
    }
});

register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpupload_delete_old_attachments_event');
});

Проверка результата после внедрения

Для проверки корректной работы:

  • В админке WordPress перейдите в Медиа > Библиотека и отфильтруйте файлы по дате загрузки (если доступно) или используйте SQL-запросы для оценки количества вложений старше установленного срока.
  • Запустите функцию вручную через WP-CLI или временно добавьте вызов функции в шаблон и проверьте, что файлы удаляются.
  • Проверьте, что после удаления в базе не осталось записей о файлах и сами файлы удалены из папки uploads.

Частые ошибки и как их исправить

  • Удаление важных файлов, используемых на сайте: обязательно проверьте, что файлы не привязаны к публикациям или товарам, иначе контент сломается. Для этого можно расширить запрос, исключив вложения, которые используются.
  • Неправильное расписание WP-Cron: если сайт мало посещаем, задачи WP-Cron могут не запускаться вовремя. Для надежности настройте системный cron или используйте плагин WP Crontrol для мониторинга.
  • Права доступа к файлам: убедитесь, что серверный пользователь имеет права на удаление файлов в папке uploads.
  • Превышение лимита времени выполнения скрипта: при большом количестве файлов разбивайте удаление на партии или используйте AJAX-запросы.

Практические советы по безопасности и производительности

  • Перед удалением создавайте резервную копию медиабиблиотеки и базы данных.
  • Добавьте логирование удалённых файлов для возможности отката и аудита.
  • Для больших сайтов используйте WP-CLI команды для удаления, чтобы избежать тайм-аутов PHP.
  • Оптимизируйте запросы к базе данных и используйте индексы по полю post_date.

Сравнение вариантов удаления старого медиаконтента

МетодПлюсыМинусы
Использование WP-Cron с кастомной функцией Гибкость, автоматизация, контроль через код Зависит от посещаемости сайта, требует навыков разработки
Плагины очистки медиатеки Простота использования, готовый функционал Могут быть избыточными, риск удаления нужных файлов
Ручное удаление через FTP и базу Максимальный контроль Трудозатратно и рискованно

Вам также может быть интересно:

Как решить проблему не работает загрузка файлов в WordPress при ограничениях сервера
14.09.2026
Как защитить загружаемые файлы WordPress от неавторизованного доступа
03.10.2026
Как добавить поддержку потоковой записи видео в WordPress
21.09.2026
Как ограничить загрузку файлов в WooCommerce по ролям и статусам заказа
10.08.2026
Как сохранить и оптимизировать базу данных WordPress: практические советы
15.09.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее