Автоматическая очистка старого медиаконтента в WordPress

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

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

Медиабиблиотека WordPress по умолчанию не удаляет файлы, даже если записи или страницы, где они использовались, были удалены. Такие файлы остаются «мертвыми» и занимают место на диске. Это может привести к следующим проблемам:

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

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

Настройка автоматической очистки старых файлов с помощью WP Cron

Создание функции удаления файлов, неиспользуемых более 30 дней

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

function wpupload_delete_old_unused_media() {
    $days = 30; // количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_wpupload_attachment_used',
                'compare' => 'NOT EXISTS',
            ),
        ),
    );

    $attachments = get_posts($args);

    foreach ($attachments as $attachment) {
        // Проверяем, используется ли файл в контенте
        $used = false;
        $posts = get_posts(array(
            's' => basename(get_attached_file($attachment->ID)),
            'post_type' => 'any',
            'posts_per_page' => 1,
        ));
        if (!empty($posts)) {
            $used = true;
            update_post_meta($attachment->ID, '_wpupload_attachment_used', 1);
        }

        if (!$used) {
            wp_delete_attachment($attachment->ID, true);
        }
    }
}

Эта функция ищет вложения (attachment), которые старше 30 дней, и проверяет, используются ли они в каких-либо постах. Если нет — удаляет их с сервера.

Регистрация задачи WP Cron для периодического запуска

Чтобы функция запускалась автоматически, зарегистрируем событие в планировщике WordPress:

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');

add_action('wpupload_cleanup_event', 'wpupload_delete_old_unused_media');

Этот код добавляет ежедневный запуск функции очистки.

Использование плагинов для автоматической очистки медиабиблиотеки

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

  • Media Cleaner — анализирует медиафайлы и удаляет неиспользуемые. Есть бесплатная и PRO версии. Позволяет безопасно очищать библиотеку без риска удалить нужные файлы.
  • WP-Optimize — комплексное решение для оптимизации базы данных и медиа, включая удаление неиспользуемых изображений.
  • Enable Media Replace — позволяет заменять файлы в медиабиблиотеке, что помогает поддерживать актуальность контента.

Для автоматизации процесса можно настроить запуск плагина Media Cleaner с помощью WP Cron, используя его API — подробности есть в документации плагина.

Как интегрировать очистку медиаконтента с WP Upload Dir для разделения и управления файлами

Если у вас на сайте большое количество загруженных файлов, можно использовать плагин WP Upload Dir для разделения файлов по папкам и категориям. Это упрощает поиск и удаление устаревших файлов.

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

Можно дополнительно расширить функцию очистки, проверяя файлы в определённых директориях:

function wpupload_delete_old_files_in_custom_dir() {
    $upload_dir = wp_upload_dir();
    $custom_dir = $upload_dir['basedir'] . '/custom_folder';
    $files = glob($custom_dir . '/*');
    $now = time();
    $days = 30 * 24 * 60 * 60;

    foreach ($files as $file) {
        if (is_file($file)) {
            $file_time = filemtime($file);
            if (($now - $file_time) > $days) {
                unlink($file); // Удаление файла
            }
        }
    }
}

Практические рекомендации и безопасность при очистке медиаконтента

Автоматическое удаление файлов требует осторожности. Вот несколько советов, чтобы не потерять важные данные:

  • Перед запуском очистки сделайте полный бэкап сайта и базы данных.
  • Тестируйте функцию удаления на тестовом сайте или копии базы.
  • Используйте мета-поля и кэширование для ускорения проверки использования файлов.
  • Добавьте в логи информацию о удалённых файлах для последующего анализа.
  • Регулярно проверяйте медиабиблиотеку вручную, чтобы убедиться в правильности работы скриптов.

Для примера можно добавить логирование удалённых файлов:

function wpupload_log_deleted_file($file) {
    $log_file = WP_CONTENT_DIR . '/wpupload_deleted_files.log';
    $log_entry = date('Y-m-d H:i:s') . " - Deleted: " . $file . PHP_EOL;
    file_put_contents($log_file, $log_entry, FILE_APPEND);
}

// В функции удаления добавить вызов:
// wpupload_log_deleted_file(get_attached_file($attachment->ID));
Как разрешить и защитить доступ к загруженным файлам в WooCommerce
03.05.2026
Автоматическое удаление файлов из WooCommerce после отмены заказа
18.05.2026
Автоматическая очистка старого медиаконтента в WordPress
13.03.2026
Автоматическое удаление товаров в WooCommerce по сроку накопления на складе
26.04.2026
Как использовать WP Filesystem API для работы с файлами в WordPress
16.04.2026

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