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

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

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

Медиафайлы в WordPress хранятся в папке wp-content/uploads и управляются через медиабиблиотеку. С течением времени там накапливается много мусора — картинки, загруженные для тестов, прежние версии изображений, или файлы, которые перестали использоваться после редизайна сайта.

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

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

Но важно не удалить файлы, которые действительно используются, иначе на сайте появятся битые ссылки и отсутствующие изображения.

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

Ручной поиск через админку WordPress

В стандартной медиабиблиотеке WordPress можно фильтровать файлы по привязке к записям (например, «Не прикрепленные»). Однако это не всегда означает, что файл не используется на сайте, так как он мог быть вставлен напрямую через URL в контент.

Поэтому ручной способ подходит только для первичного отбора и не гарантирует 100% точность.

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

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

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

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

Удаление неиспользуемых медиафайлов с помощью плагина Media Cleaner

Рассмотрим пример работы с Media Cleaner:

  1. Установите и активируйте плагин из репозитория WordPress.
  2. Зайдите в меню "Media Cleaner" в админке.
  3. Запустите сканирование медиабиблиотеки. Плагин проанализирует файлы и укажет, какие из них не привязаны к записям и не найдены ни в каком контенте.
  4. Внимательно просмотрите список, чтобы исключить важные файлы — иногда плагин может ошибиться.
  5. Удалите выбранные файлы через интерфейс плагина.

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

Пример кастомного скрипта для поиска неиспользуемых медиа по базе данных

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

function wpin_find_unused_media_files() {
    global $wpdb;

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

    // Получаем все ID вложений, которые используются в постах (в метаполях и контенте)
    $used_attachments = [];

    // Ищем вложения в мета-полях
    $meta_ids = $wpdb->get_col("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id'");
    foreach ($meta_ids as $id) {
        if (is_numeric($id)) {
            $used_attachments[] = intval($id);
        }
    }

    // Ищем вложения в контенте (по ID вложения)
    $query = "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type IN ('post', 'page')";
    $posts = $wpdb->get_results($query);
    foreach ($posts as $post) {
        foreach ($all_attachments as $att_id) {
            if (strpos($post->post_content, 'wp-image-' . $att_id) !== false) {
                $used_attachments[] = $att_id;
            }
        }
    }

    // Убираем дубликаты
    $used_attachments = array_unique($used_attachments);

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

    return $unused;
}

// Использование: получить список ID неиспользуемых медиафайлов
$unused_files = wpin_find_unused_media_files();
if (!empty($unused_files)) {
    echo 'Найдено неиспользуемых файлов: ' . count($unused_files) . "\n";
    foreach ($unused_files as $id) {
        echo 'ID: ' . $id . "\n";
    }
} else {
    echo 'Все файлы используются на сайте.';
}

Этот скрипт собирает ID всех вложений, затем проверяет, используются ли они в мета-данных (например, как миниатюры) и в содержимом записей (по классу wp-image-ID), после чего возвращает список неиспользуемых вложений.

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

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

После того, как вы собрали список ID неиспользуемых файлов, их можно удалить программно, используя функцию wp_delete_attachment(). Пример:

foreach ($unused_files as $attachment_id) {
    wpin_delete_unused_media_file($attachment_id);
}

function wpin_delete_unused_media_file($attachment_id) {
    // Удаляем вложение и все связанные файлы
    wp_delete_attachment($attachment_id, true);
}

Обратите внимание, что параметр true в функции wp_delete_attachment гарантирует удаление файлов с диска.

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

Удаление медиафайлов — операция необратимая, особенно если вы удаляете файлы не через корзину WordPress, а напрямую. Чтобы не потерять важные данные, обязательно:

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

Дополнительные полезные инструменты и плагины

Кроме Media Cleaner и Clearfy Pro, можно рекомендовать:

  • Force Regenerate Thumbnails — для удаления и восстановления миниатюр, что помогает освободить место.
  • WPRemark — если вы используете в проекте отзывы с изображениями, этот плагин поможет управлять ими и оптимизировать.

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

Автоматизация обработки возвратов и обменов в WooCommerce
18.05.2026
WooCommerce: отключение автоматического обновления корзины при изменении вариантов товара
09.06.2026
WooCommerce не обновляет стоимость в корзине: как исправить
19.04.2026
Как отключить Emoji в WordPress для ускорения сайта
16.04.2026
WooCommerce: автоматическое удаление заказов по статусу и времени
04.07.2026