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

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

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

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

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

  • Сэкономить место на хостинге;
  • Ускорить резервное копирование и обновления;
  • Оптимизировать работу сайта;
  • Облегчить управление библиотекой медиа.

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

Автоматизация удаления с помощью плагинов

Плагин Media Cleaner

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

Основные функции:

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

Как настроить Media Cleaner для автоматического удаления

После установки и активации перейдите в меню плагина и выполните сканирование. Затем можно включить автоматическое удаление через Cron, создав задачу на сервере или используя WP-Cron.

Решение на коде для автоматического удаления старых медиафайлов

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

Ниже пример функции для файла functions.php вашей темы или отдельного плагина:

function wptask_delete_old_unused_media() {
    $days_threshold = 90; // Файлы старше 90 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days_threshold .' days'));

    $args = [
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'date_query'     => [
            [
                'before' => $date_threshold,
            ],
        ],
        'posts_per_page' => -1,
    ];

    $query = new WP_Query($args);

    foreach ($query->posts as $attachment) {
        // Проверяем, используется ли файл в контенте
        $is_used = false;

        $posts = get_posts([
            'post_type'   => 'any',
            'post_status' => 'publish',
            's'           => basename(get_attached_file($attachment->ID)),
            'fields'      => 'ids',
        ]);

        if (!empty($posts)) {
            $is_used = true;
        }

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

// Запуск функции по Cron
add_action('wptask_daily_media_cleanup', 'wptask_delete_old_unused_media');

// Создаем задачу, если не существует
if (!wp_next_scheduled('wptask_daily_media_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wptask_daily_media_cleanup');
}

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

Важно: перед использованием настоятельно рекомендуется сделать резервную копию сайта и протестировать код на тестовом сервере.

Как интегрировать автоматизацию с WPShop плагинами

Если вы используете на сайте плагины из WPShop, например, My Popup или OmniVideo, для которых часто загружаются медиа, необходимо учитывать их особенности.

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

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

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

function wptask_is_media_used_by_wpshop($attachment_id) {
    $meta = get_post_meta($attachment_id);
    // Пример: если у файла есть метка плагина My Popup
    if (!empty($meta['my_popup_attachment'])) {
        return true;
    }
    return false;
}

// В основной функции добавляем проверку
if (wptask_is_media_used_by_wpshop($attachment->ID)) {
    continue; // Пропускаем удаление
}

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

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

  • Всегда делайте полную резервную копию сайта перед автоматизацией;
  • Тестируйте код на тестовой или локальной копии;
  • Используйте предварительный просмотр в плагинах, таких как Media Cleaner;
  • Проверяйте логи удалений и создавайте возможность восстановления;
  • Регулярно обновляйте плагины и тему для совместимости.

Выводы и лучшие практики

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

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

WooCommerce: автоматическое отключение неиспользуемых платёжных систем
05.06.2026
Как изменить логин пользователя в WordPress без переустановки и регистрации
26.12.2025
Автоматическое закрытие открытых тикетов поддержки в WordPress
22.02.2026
Как автоматически отправлять отзывы из WordPress на email
02.03.2026
Как полностью удалить emoji из WordPress для оптимизации скорости
12.12.2025