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

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

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

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

  • Снизить нагрузку на хранилище хостинга.
  • Ускорить резервное копирование сайта.
  • Повысить производительность WordPress и админки.

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

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

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

Существуют плагины, которые помогают найти и удалить такие файлы:

  • Media Cleaner — мощный плагин для поиска неиспользуемых медиафайлов в библиотеке и на сервере. Он анализирует базу данных и контент сайта, выявляя «битые» или неиспользуемые файлы.
  • DNUI (Delete Not Used Image) — простой инструмент для поиска и удаления неиспользуемых изображений.
  • WP-Optimize — плагин для оптимизации базы данных и очистки неиспользуемых медиа.

Но иногда хочется кастомного решения для автоматического удаления старых медиа, например, создавая правило по дате загрузки.

Автоматическое удаление медиафайлов старше N дней через WP-Cron

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

Для этого используем встроенную систему планировщика заданий WP-Cron и функцию удаления медиа (attachment).

Шаг 1. Создаём функцию удаления старых медиафайлов

function wprobot_delete_old_media_files() {
    $days = 30; // Удалять файлы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'date_query'     => array(
            'before' => $date,
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $attachment_id) {
            // Проверяем, что файл не используется
            $used = wprobot_is_media_used($attachment_id);
            if (!$used) {
                wp_delete_attachment($attachment_id, true);
            }
        }
    }
}

// Вспомогательная функция проверки использования медиа
function wprobot_is_media_used($attachment_id) {
    global $wpdb;
    $file = get_attached_file($attachment_id);
    if (!$file) return true; // Если файл не найден, считаем используемым

    // Проверяем, встречается ли URL файла в содержимом постов
    $url = wp_get_attachment_url($attachment_id);
    $like_url = '%' . $wpdb->esc_like($url) . '%';

    $count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
        $like_url
    ));

    return ($count > 0);
}

Шаг 2. Добавляем задание в WP-Cron

Зарегистрируем событие, которое будет запускаться, например, один раз в сутки.

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

add_action('wprobot_daily_old_media_cleanup', 'wprobot_delete_old_media_files');

Как это работает

Этот код ищет все медиафайлы (attachments), загруженные более 30 дней назад, и проверяет, используются ли они в содержимом сайта. Если нет — файл удаляется безвозвратно (параметр true в wp_delete_attachment).

Вы можете изменить количество дней, установив нужное значение в переменной $days. Также можно расширить проверку использования, например, учитывать пользовательские поля, метаданные и т.д.

Использование плагина Clearfy Pro для управления медиафайлами

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

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

Рекомендации по безопасности и резервному копированию

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

Если планируете использовать кодовое решение, сначала протестируйте его на тестовом сайте или в локальной среде.

Заключение

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

Автоматическое отключение неактивных заказов в WooCommerce
09.06.2026
Как автоматизировать создание и управление вариантами выбора в WordPress
24.03.2026
Как автоматически создать настройку с большим выбором в WordPress
20.03.2026
Как автоматически отслеживать изменения файлов в WordPress с помощью Watchdog
14.02.2026
Как настроить автоматическое отображение связанных записей в WordPress
16.12.2025