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

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

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

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

  • Занятие дискового пространства, что может увеличить расходы на хостинг.
  • Снижение производительности сайта и резервного копирования из-за большого объёма данных.
  • Потенциальные сложности при миграции сайта или обновлении.

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

Проверка и удаление неиспользуемых медиафайлов с помощью плагинов

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

1. Media Cleaner

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

Основные возможности:

  • Сканирование сайта и выявление неиспользуемых файлов;
  • Безопасное удаление с возможностью восстановления из корзины;
  • Поддержка мультимедийных галерей и сложных типов контента.

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

2. WP-Optimize Media Cleaner

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

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

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

Основная логика решения:

  1. Получить список всех медиафайлов (attachments) из базы данных.
  2. Проверить, используются ли они в записях, страницах, виджетах или других метах.
  3. Удалить те, которые не используются.

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

function wpskill_get_unused_media_ids() {
    global $wpdb;

    // Получаем все ID вложений
    $all_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");

    $used_attachments = [];

    // Поиск вложений, прикреплённых к постам
    $attached_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_parent > 0");

    $used_attachments = array_merge($used_attachments, $attached_attachments);

    // Поиск вложений, используемых в контенте
    $pattern = '/wp-image-(\d+)/i';
    $posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post', 'page')");

    foreach ($posts as $post) {
        if (preg_match_all($pattern, $post->post_content, $matches)) {
            foreach ($matches[1] as $id) {
                $used_attachments[] = intval($id);
            }
        }
    }

    // Уникальные ID используемых вложений
    $used_attachments = array_unique($used_attachments);

    // Вычисляем неиспользуемые вложения
    $unused = array_diff($all_attachments, $used_attachments);

    return $unused;
}

Эта функция возвращает массив ID медиафайлов, которые не прикреплены к постам и не используются в контенте в виде классических <img> с классом wp-image-ID.

Автоматическое удаление найденных файлов

Чтобы удалить неиспользуемые медиа файлы, можно использовать следующий код:

function wpskill_delete_unused_media() {
    $unused_ids = wpskill_get_unused_media_ids();

    foreach ($unused_ids as $id) {
        wp_delete_attachment($id, true); // true — удалить файлы с диска
    }
}

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

Как настроить автоматическую очистку через WP-Cron

Для регулярного удаления неиспользуемых медиафайлов добавим задачу в планировщик WordPress.

function wpskill_schedule_media_cleanup() {
    if (!wp_next_scheduled('wpskill_media_cleanup_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpskill_media_cleanup_hook');
    }
}
add_action('wp', 'wpskill_schedule_media_cleanup');

add_action('wpskill_media_cleanup_hook', 'wpskill_delete_unused_media');

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

Рекомендации и меры предосторожности

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

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

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

Как добавить автоматическое обновление трансляции видео в WordPress
21.01.2026
Автоматическое создание конкурсов в WordPress
21.03.2026
Как создать автоматический резервный копий WordPress с помощью WP-Cron
11.02.2026
Автоматический отчет по ошибкам WordPress с применением логов и уведомлений
30.03.2026
Автоматическое создание и отправка email-отчетов в WordPress
14.03.2026