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

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

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

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

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

Удаление таких файлов позволяет улучшить производительность и упростить администрирование.

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

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

  • Media Cleaner — популярный плагин, который сканирует библиотеку и определяет медиа, не связанные с контентом. Он поддерживает работу с различными типами записей, плагинами и конструкторами страниц.
  • DNUI (Delete Not Used Image) — простой и эффективный инструмент для поиска и удаления неиспользуемых изображений.
  • WPGPT Media Cleaner Pro (ссылка: https://wpshop.ru/plugins/media-cleaner) — расширенная версия с поддержкой дополнительных кастомных типов записей и интеграцией с плагинами.

Настройка Media Cleaner:

  1. Установите и активируйте плагин.
  2. Перейдите в раздел Media » Cleaner.
  3. Нажмите кнопку сканирования, чтобы найти неиспользуемые файлы.
  4. Просмотрите результаты и удалите ненужные файлы.

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

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

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

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

function wpfinder_delete_old_media() {
    global $wpdb;
    $days_old = 180; // количество дней
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    // Получаем ID вложений старше заданной даты
    $attachments = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_date < %s",
        $date_limit
    ));

    foreach ($attachments as $attachment_id) {
        // Проверяем, используется ли файл в контенте
        $file_used = false;
        $file_url = wp_get_attachment_url($attachment_id);
        if (!$file_url) continue;

        $posts_with_file = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        if ($posts_with_file > 0) {
            $file_used = true;
        }

        if (!$file_used) {
            // Удаляем вложение и файлы с диска
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Запускаем функцию через WP-Cron раз в сутки
if (!wp_next_scheduled('wpfinder_daily_media_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpfinder_daily_media_cleanup');
}
add_action('wpfinder_daily_media_cleanup', 'wpfinder_delete_old_media');

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

Как проверить, что удаление безопасно и не повредит сайт

Перед автоматическим удалением рекомендуем:

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

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

Интеграция с WP-Cron и планировщиками задач

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

Если ваш хостинг не поддерживает WP-Cron, можно настроить системный cron-задание, вызывающее файл wp-cron.php через curl или wget.

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

Удаление неиспользуемых и старых медиафайлов в WordPress — важная задача для поддержания производительности и удобства управления сайтом. Использование плагинов, таких как Media Cleaner Pro, позволяет быстро и безопасно находить и удалять лишние файлы. Для регулярной автоматизации можно написать собственный скрипт на PHP и запускать его через WP-Cron. Обязательно тестируйте решения на резервной копии сайта, чтобы избежать потери нужных данных.

Как создать автоматический импорт постов в WordPress из внешнего источника
18.12.2025
Диагностика и решение проблем с неработающим AJAX в WooCommerce
07.06.2026
Создание и использование Custom Post Types в WordPress
17.11.2025
Создание динамических виджетов в WordPress с использованием REST API
02.04.2026
Как создать динамическое меню в WordPress с применением хуков
12.03.2026