Диагностика: как определить, какие файлы не используются
Перед удалением файлов из медиабиблиотеки важно понять, какие из них действительно не используются на сайте. Файлы считаются неиспользуемыми, если они не связаны с публикациями, страницами, виджетами или другими частями сайта.
Для диагностики воспользуйтесь SQL-запросом к базе данных, который ищет вложения, не связанных с контентом:
SELECT ID, post_title FROM wp_posts WHERE post_type = 'attachment' AND ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key IN ('_thumbnail_id')) AND ID NOT IN (SELECT ID FROM wp_posts WHERE post_parent > 0);Этот запрос найдет вложения без родительских постов и не используемые как миниатюры.
Проверка файлов, не привязанных к контенту
Чтобы проверить, не используется ли файл в содержимом страниц или постов, можно выполнить поиск по базе данных по URL файла:
SELECT ID FROM wp_posts WHERE post_content LIKE '%имя_файла%';Если записи не найдены, файл скорее всего не используется в контенте.
Пошаговое удаление неиспользуемых файлов без плагинов
Шаг 1. Резервное копирование
Перед любыми изменениями сделайте бэкап базы данных и папки wp-content/uploads.
Шаг 2. Получение списка неиспользуемых вложений
Создайте PHP-скрипт, который выполнит SQL-запрос и получит ID вложений без связей:
global $wpdb;
$unused_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND ID NOT IN (SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id') AND post_parent = 0");
if (empty($unused_attachments)) {
echo 'Неиспользуемых файлов не найдено.';
} else {
foreach ($unused_attachments as $attachment_id) {
wp_delete_attachment($attachment_id, true);
}
echo count($unused_attachments) . ' файлов удалено.';
}Шаг 3. Удаление файлов и записей
Функция wp_delete_attachment удалит запись из базы и физический файл с миниатюрами.
Проверка результата после удаления
Проверьте медиабиблиотеку в админке. Убедитесь, что удаленные файлы отсутствуют. Также просмотрите страницы сайта на предмет ошибок загрузки медиа.
Запустите SQL-запрос из раздела диагностики повторно — он должен вернуть пустой результат.
Частые ошибки и как их исправить
- Удаление нужных файлов: Иногда файлы используются в виджетах, шорткодах или кастомных полях. Перед удалением стоит проверить содержимое всех таких областей.
- Проблемы с правами доступа: Если
wp_delete_attachmentне удаляет файлы, проверьте права на папку uploads и файлы (рекомендуется 755 для папок и 644 для файлов). - Удаление только записи без файла: Используйте параметр
trueво втором аргументеwp_delete_attachment($id, true), чтобы удалить физический файл.
Практические советы по безопасности и производительности
- Запускайте массовое удаление на сайте с низкой нагрузкой, чтобы избежать перегрузки сервера.
- Перед автоматизацией удаления добавьте логирование удаленных ID и файлов для возможности отката.
- Регулярно очищайте медиабиблиотеку, чтобы не растрачивать место на сервере и не замедлять бэкапы.
- Для комплексной диагностики используйте WP-CLI с командами
wp media listиwp media deleteдля более гибкого управления.
Таблица сравнения методов удаления неиспользуемых файлов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| PHP-скрипт с wp_delete_attachment | Кодовое удаление без плагинов | Точный контроль, не требует дополнительных установок | Требует знаний PHP и осторожности |
| WP-CLI | Командная строка для управления медиа | Быстро, удобно для админов с SSH-доступом | Не у всех есть доступ к консоли сервера |
| Плагины (Media Cleaner, WP-Optimize) | Готовые решения с интерфейсом | Простота использования, дополнительные функции | Риск удаления нужных файлов, нагрузка на сайт |