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

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

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

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

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

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

В WordPress при загрузке файла в медиабиблиотеку создаётся запись в базе данных (в таблице wp_posts с типом attachment). При вставке изображения в пост или страницу к файлу добавляется связь с контентом.

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

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

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

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

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

Например, чтобы установить и использовать Media Cleaner, нужно:

  1. Установить плагин через админ-панель: Плагины > Добавить новый, в поиске ввести "Media Cleaner".
  2. Активировать плагин и перейти в его настройки.
  3. Запустить анализ файлов и дождаться отчёта.
  4. Просмотреть список неиспользуемых файлов и при необходимости удалить их.

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

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

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

Основная идея:

  • Получить все записи attachment из базы данных.
  • Для каждого attachment получить URL файла.
  • Проверить, встречается ли этот URL в таблице wp_posts в контенте постов, страниц и других типов.
  • Если файл не найден ни в одном контенте — пометить для удаления.

Пример функции с префиксом wpid_:

function wpid_find_unused_attachments() {
    global $wpdb;
    $unused = [];

    // Получаем все attachment
    $attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");

    foreach ($attachments as $attachment) {
        $file_url = $attachment->guid;
        // Ищем URL файла в содержимом записей
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        if ($count == 0) {
            $unused[] = $attachment->ID;
        }
    }
    return $unused;
}

Эта функция возвращает массив ID attachment, которые не используются в содержимом постов. После проверки можно удалить их программно или через админку.

Удаление можно сделать через стандартную функцию WordPress wp_delete_attachment(), например:

foreach (wpid_find_unused_attachments() as $attachment_id) {
    wp_delete_attachment($attachment_id, true); // true — без перемещения в корзину
}

Особенности и подводные камни

Несмотря на простоту идеи, есть важные моменты:

  • Некоторые файлы используются в нестандартных местах — например, в настройках темы, мета-полях, виджетах, плагинах. Они не могут быть найдены простым поиском по содержимому.
  • Если сайт использует плагин кэширования или CDN, ссылки в контенте могут быть изменены, что затрудняет поиск.
  • Перед удалением желательно вручную проверить список неиспользуемых файлов.
  • Обязательно делать резервную копию перед массовым удалением.

Если вы используете плагины из WPShop.ru, например, Clearfy Pro, он предлагает дополнительные инструменты для оптимизации и очистки медиабиблиотеки с учётом различных особенностей WordPress.

Автоматизация очистки медиабиблиотеки с WPID

Для более продвинутых пользователей можно настроить автоматический запуск проверки и очистки неиспользуемых файлов, используя WP-Cron. Пример кода для добавления в файл functions.php темы или в отдельный плагин:

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

add_action('wpid_unused_media_cleanup_hook', 'wpid_run_unused_media_cleanup');

function wpid_run_unused_media_cleanup() {
    $unused = wpid_find_unused_attachments();
    foreach ($unused as $attachment_id) {
        wp_delete_attachment($attachment_id, true);
    }
}

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

Как использовать REST API для создания простого плагина WordPress
03.12.2025
Как исключить определённые плагины из автообновлений в WordPress
01.05.2026
Как использовать WPCommunity для создания форума в WordPress
21.03.2026
Как автоматически обновлять миниатюры в WordPress при смене размера изображений
14.03.2026
Создание автоматических отчетов в WordPress с WPRemark
08.03.2026