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

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

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

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

Диагностика проблемы: как определить, что медиа-файлы не используются

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

  • контентом постов/страниц (вставленные изображения и файлы);
  • обложками записей (featured images);
  • пользовательскими полями;
  • виджетами и настройками темы;
  • плагинами, которые могут хранить ссылки на файлы в своих таблицах.

Самый простой способ диагностики — найти файлы, не привязанные к записям в wp_posts с типом attachment.

SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;

Файлы с post_parent = 0 не связаны с другими записями. Но это не всегда значит, что их можно удалить, так как ссылки на них могут быть в контенте, метаданных или настройках.

Пошаговое решение: автоматизация удаления неиспользуемых медиа-файлов

Шаг 1. Создаем резервную копию сайта и базы данных

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

Шаг 2. Устанавливаем плагин для поиска неиспользуемых медиа

Рекомендуется использовать плагин Media Cleaner. Он анализирует базу и файлы, выявляет неиспользуемые медиа. Бесплатная версия подходит для небольших сайтов, для больших рекомендуют PRO версию.

Шаг 3. Запускаем сканирование и проверяем результаты

После установки и активации плагина перейдите в Медиа > Media Cleaner и запустите анализ. Плагин покажет список файлов, которые не связаны с записями или контентом.

Шаг 4. Тщательно проверяем список перед удалением

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

Шаг 5. Автоматизируем удаление с помощью WP-CLI

Для регулярного очищения можно настроить WP-CLI скрипт, который будет удалять неиспользуемые медиа. Пример команды, которая удаляет медиафайлы с post_parent = 0 и не используемые в содержимом:

wp media list --field=ID --post_parent=0 | xargs -d ' ' wp media delete --yes
<

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

Шаг 6. Пишем кастомный код для удаления неиспользуемых медиа (опционально)

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

function delete_unused_attachments() {
    global $wpdb;
    $attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");
    foreach ($attachments as $attachment) {
        $id = $attachment->ID;
        $url = $attachment->guid;
        // Проверяем, есть ли URL файла в контенте
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($url) . '%'
        ));
        if ($count == 0) {
            wp_delete_attachment($id, true);
            error_log("Deleted attachment ID: $id");
        }
    }
}

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

Проверка результата после внедрения

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

Частые ошибки и как их исправить

  • Удаление файлов, используемых в настройках или плагинах. Решение: проверяйте все места использования, включая метаданные, виджеты и плагинные таблицы. Используйте инструменты с возможностью ручного подтверждения удаления.
  • Неполное удаление медиа — файлы остаются на сервере после удаления из базы. Решение: использовать wp_delete_attachment($id, true) с параметром true, чтобы удалять файлы физически.
  • Ошибка при массовом удалении через WP-CLI из-за больших объемов. Решение: разбивайте удаление на порции, используйте скрипты с ограничением количества обработанных файлов за один запуск.

Практические советы по безопасности и производительности

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

Сравнение методов удаления неиспользуемых медиа

МетодПлюсыМинусыПодходит для
Плагин Media CleanerИнтерфейс, тщательный анализ, поддержка PROПлатные функции для больших сайтов, может пропустить файлы в нестандартных местахСредние и крупные сайты, удобство
WP-CLI скриптыАвтоматизация, быстрое выполнение, скрипты под себяТребует навыков, риск удаления нужных файлов без проверкиОпытные разработчики, автоматизация
Кастомный PHP-кодМаксимальный контроль, интеграция с бизнес-логикойСложность поддержки, затраты времениУникальные кейсы, нестандартные сайты
Как разделить конкретные части шаблона WordPress на отдельные файлы
15.03.2026
Как исправить ошибку недоступности WooCommerce AJAX корзины после обновления
20.06.2026
Как правильно очистить кеш WooCommerce после обновления сайта
19.05.2026
Как использовать WPRemark для создания оценок и отзывов в WordPress
01.01.2026
Как отладить проблему: не работает отправка писем через PHPMailer в WordPress
20.06.2026