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

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

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

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

Удаление неиспользуемых медиафайлов помогает:

  • Снизить нагрузку на диск и сервер;
  • Уменьшить объём резервных копий;
  • Повысить скорость загрузки сайта;
  • Сделать управление медиа удобнее и быстрее.

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

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

Самые популярные плагины для поиска неиспользуемых медиафайлов:

  • Media Cleaner — сканирует библиотеку и показывает файлы, которые не используются в записях.
  • Clearfy Pro — включает расширенные возможности по оптимизации, в том числе управление медиа.

Если хотите автоматизировать процесс и контролировать удаление программно, можно использовать следующий подход.

Автоматизация удаления старых медиафайлов с помощью кода

Разработаем функцию, которая будет находить изображения, не привязанные к записям и не используемые в контенте, и удалять их. Для безопасности добавим ограничения по дате — удалять только файлы старше определённого срока (например, 6 месяцев).

Шаг 1. Поиск неиспользуемых медиафайлов

Для этого мы проверим все вложения типа image и сверим их с контентом сайта.

function wpguest_find_unused_media() {
    global $wpdb;
    $date_limit = date('Y-m-d H:i:s', strtotime('-6 months'));

    // Получаем все ID вложений-изображений старше 6 месяцев
    $attachments = $wpdb->get_results($wpdb->prepare(
        "SELECT ID, post_content FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
        $date_limit
    ));

    $unused = [];

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

        // Проверяем прикрепление к родительскому посту
        $parent_id = get_post_field('post_parent', $id);
        if ($parent_id) {
            continue; // используется в родительском посте
        }

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

        if (!$count) {
            $unused[] = $id;
        }
    }

    return $unused;
}

Шаг 2. Удаление найденных файлов

Теперь реализуем функцию удаления по ID с использованием стандартной функции WordPress wp_delete_attachment, которая корректно удалит все размеры изображения и все связанные данные.

function wpguest_delete_unused_media() {
    $unused = wpguest_find_unused_media();
    $deleted = 0;

    foreach ($unused as $attachment_id) {
        if (wp_delete_attachment($attachment_id, true)) {
            $deleted++;
        }
    }

    return $deleted;
}

Шаг 3. Автоматизация через WP-Cron

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

add_action('wpguest_monthly_media_cleanup', 'wpguest_delete_unused_media');

if (!wp_next_scheduled('wpguest_monthly_media_cleanup')) {
    wp_schedule_event(time(), 'monthly', 'wpguest_monthly_media_cleanup');
}

Такой подход поможет держать медиа-библиотеку в чистоте без вашего постоянного участия.

Дополнительные советы по управлению медиафайлами в WordPress

Используйте специализированные плагины

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

Регулярно проверяйте медиафайлы перед удалением

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

Оптимизируйте изображения при загрузке

Для снижения объёма медиа используйте плагины оптимизации, например, Clearfy Pro — он умеет автоматически сжимать и оптимизировать изображения при загрузке, что снижает нагрузку на сервер.

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

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

Как автоматизировать удаление устаревших transient в WordPress
07.03.2026
Как автоматизировать создание и удаление черновиков в WordPress
12.03.2026
Как решить ошибку 429 в WooCommerce при автообновлении корзины
22.04.2026
Как автоматизировать создание собственных типов записей в WordPress с помощью кода и плагинов
21.12.2025
Как удалить старые и неиспользуемые медиа файлы в WordPress
04.01.2026