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

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

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

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

Ручное удаление занимает много времени и требует аккуратности — нельзя случайно удалить файл, который используется на сайте. Поэтому автоматизация этого процесса — оптимальное решение.

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

Плагин Media Cleaner

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

Особенности:

  • Поддержка работы с плагинами и темами для корректного определения используемых файлов.
  • Возможность предварительного просмотра и выборочного удаления.
  • Автоматизация очистки с помощью CRON-заданий (в премиум версии).

Настройка автоматического удаления через WP-Cron

Если вы хотите, чтобы плагин проводил очистку автоматически, можно настроить WP-Cron, который будет запускать процесс очистки регулярно. В бесплатной версии Media Cleaner это реализовать сложно, но в премиум версии можно задать периодичность. Для простых сайтов можно использовать обычный CRON на сервере.

Решение без плагинов: автоматическое удаление старых медиафайлов с помощью кода

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

Основная логика скрипта

1. Получаем список всех вложений (attachment) из базы данных WordPress.

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

3. Если не используется и дата загрузки старше определенного порога (например, 6 месяцев), удаляем его.

Пример кода для wpfront.ru

function wpfront_delete_old_unused_media() {
    $threshold_date = date('Y-m-d H:i:s', strtotime('-6 months'));
    
    $args = [
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'posts_per_page' => -1,
        'date_query'     => [
            [
                'before' => $threshold_date
            ]
        ]
    ];

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return;
    }

    foreach ($query->posts as $attachment) {
        $id = $attachment->ID;

        // Проверяем, есть ли связи с постами
        $parent_id = $attachment->post_parent;
        if ($parent_id) {
            continue; // Используется в каком-то посте
        }

        // Дополнительно можно проверить использование в контенте
        $file_url = wp_get_attachment_url($id);
        global $wpdb;
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        if ($count > 0) {
            continue; // Используется в контенте
        }

        // Удаляем вложение
        wp_delete_attachment($id, true);
    }
}

// Привязка к крону: запускать раз в сутки
if (!wp_next_scheduled('wpfront_daily_media_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpfront_daily_media_cleanup');
}
add_action('wpfront_daily_media_cleanup', 'wpfront_delete_old_unused_media');

Этот код проверяет все вложения старше 6 месяцев без привязки к постам и без использования в контенте, и удаляет их. Запускается ежедневно с помощью WP-Cron.

Практические советы и рекомендации

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

2. Тестирование. Запускайте скрипт сначала в тестовом режиме, например, выводя список файлов для удаления, без фактического удаления.

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

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

Использование плагина Clearfy Pro для оптимизации медиа

Если вы используете Clearfy Pro, обратите внимание на встроенный модуль оптимизации и очистки медиа. Он умеет автоматически выявлять и удалять неиспользуемые изображения, а также отключать создание лишних размеров изображений, что значительно сокращает объем медиа-библиотеки.

Настройка Clearfy Pro

  • В разделе "Оптимизация" активируйте опцию очистки неиспользуемых медиа.
  • Настройте расписание автоматической очистки.
  • Просматривайте отчеты для контроля удаляемых файлов.

Заключение

Автоматическое удаление старых и неиспользуемых медиафайлов — важный шаг к поддержанию производительности и экономии ресурсов WordPress сайта. Выбор между плагинами и собственными скриптами зависит от ваших навыков и специфики проекта. Плагин Media Cleaner и Clearfy Pro предоставляют удобный интерфейс и автоматизацию, а собственные решения на базе WP-Cron помогут гибко настроить процесс под ваши нужды.

Как удалить старые ревизии постов в WordPress из базы данных
26.01.2026
Автоматическое создание резервных копий WordPress с помощью PHP и плагинов
16.03.2026
Как автоматически удалять старое медиа-содержимое в WordPress
13.03.2026
Как автоматически отключить кнопку «Добавить в корзину» в WooCommerce при отсутствии товара
24.04.2026
Как автоматически удалять старые черновики в WordPress
23.12.2025