Дубли изображений в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких причин: повторные загрузки одного и того же файла, разные размеры миниатюр, старые вложения после миграций, а иногда — копии в медиатеке, которые уже нигде не используются. Если сайт живёт давно, это начинает мешать не только в админке: растёт объём uploads, усложняется бэкап, а поиск неиспользуемых файлов становится ручной работой.
Ниже — практический сценарий: как сначала диагностировать проблему, потом безопасно отобрать дубли и удалить их без риска снести нужные изображения.
Когда дубли изображений действительно проблема
Не каждое повторяющееся имя файла означает мусор. В WordPress один загруженный файл может иметь несколько производных размеров: thumbnail, medium, large и размеры, которые добавили тема или плагины. Это нормальная работа системы. Проблемой становятся именно лишние оригиналы и копии, которые не привязаны к записям или повторно загружены вручную.
Типичные признаки:
- в
wp-content/uploadsслишком много похожих файлов с суффиксами вроде-1,-2; - в медиатеке есть несколько одинаковых изображений с разными ID;
- после переноса сайта остались старые вложения, которые не используются в контенте;
- бэкапы стали заметно тяжелее из-за медиаархива;
- админка медиа работает медленно, особенно на сайтах с большим количеством файлов.
Диагностика: как понять, что именно нужно удалять
Сначала нужно отделить реальные дубли от служебных файлов. Самая частая ошибка — удалять всё подряд по совпадению имени или по дате загрузки. Это рискованно: один и тот же файл может использоваться в нескольких записях, а миниатюры могут быть нужны теме.
Проверьте медиатеку и привязку к контенту
Откройте несколько подозрительных файлов в медиатеке и посмотрите, есть ли у них Attachment Details и где они используются. Если изображение вставлено в записи, страницы или блоки, удалять его без проверки нельзя. На больших сайтах удобнее сначала выгрузить список вложений и искать по нему вручную или через SQL.
Посмотрите, не дублируются ли именно оригиналы
Если в папке загрузок есть одинаковые изображения с разными именами, это уже кандидат на очистку. Но перед удалением нужно сравнить не только имя, а ещё размер файла и дату. Иногда файл с похожим названием — это не копия, а новая версия изображения после редактирования.
Пошаговое решение без лишнего риска
Надёжнее всего идти в два этапа: сначала собрать кандидатов, потом удалить только то, что не используется. Для небольших сайтов часть работы можно сделать через медиатеку, для крупных — через код или WP-CLI.
1. Сделайте резервную копию
Это не формальность. Очистка медиафайлов затрагивает и базу, и файловую систему. Если что-то пойдёт не так, восстановление из бэкапа будет быстрее, чем ручной поиск потерянных изображений по контенту.
2. Найдите неиспользуемые вложения
Если нужен быстрый технический способ, можно получить список вложений, у которых нет родительской записи. Это не идеальный критерий, но хороший старт для ручной проверки.
$attachments = get_posts([
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
'fields' => 'ids',
]);
foreach ($attachments as $attachment_id) {
$parent_id = wp_get_post_parent_id($attachment_id);
if (!$parent_id) {
$file = get_attached_file($attachment_id);
if ($file) {
echo $attachment_id . ' | ' . $file . PHP_EOL;
}
}
}Этот код не удаляет файлы, а только выводит кандидатов. Его удобно запускать в отдельном тестовом сниппете или через временный MU-плагин на копии сайта.
3. Удаляйте только после проверки использования
Если файл точно не нужен, удаляйте его через штатную функцию WordPress, а не вручную из папки uploads. Тогда система корректно очистит запись вложения и связанные метаданные.
$attachment_id = 123;
if (get_post_type($attachment_id) === 'attachment') {
wp_delete_attachment($attachment_id, true);
}Параметр true удаляет файл окончательно. Если вы не уверены, сначала протестируйте на копии сайта или уберите второй аргумент, чтобы проверить поведение в вашей конфигурации.
4. Если дубли появились после миграции, проверьте пути к файлам
Иногда изображения не дублируются физически, а просто теряют связь с базой после переноса. В таком случае в медиатеке видно «битые» вложения, а сами файлы лежат на месте. Тогда задача не в удалении, а в восстановлении привязки или пересборке медиатеки.
| Подход | Когда подходит | Минус |
|---|---|---|
| Ручная проверка в медиатеке | Небольшой сайт, мало файлов | Медленно и легко пропустить дубли |
Код через get_posts() и wp_delete_attachment() | Нужен точный контроль | Требует аккуратной проверки |
| Плагин для очистки медиа | Много файлов и нет времени на ручную сортировку | Нужно смотреть, как он определяет «неиспользуемые» файлы |
Как проверить результат после очистки
После удаления важно не ограничиваться визуальной проверкой медиатеки. Нужно убедиться, что сайт не потерял изображения в контенте и что миниатюры продолжают генерироваться корректно.
- Откройте несколько старых записей и страниц с изображениями.
- Проверьте главную, архивы и карточки записей, если тема выводит featured image.
- Убедитесь, что в медиатеке не осталось битых вложений с пустым предпросмотром.
- Проверьте папку
uploadsна сервере: удалённые файлы не должны оставаться там вручную. - Если используется кеш, очистите его и посмотрите страницу в режиме инкогнито.
Для технической проверки можно сравнить количество вложений до и после очистки через админку или SQL-запросом к таблице wp_posts по типу attachment. Если количество уменьшилось, а контент на сайте не сломался, очистка прошла нормально.
Частые ошибки и как их исправить
Удаляют по имени файла
Это самая опасная ошибка. Одинаковое имя не гарантирует, что файл лишний. Сначала сравните размер, дату и привязку к записи.
Стирают файлы вручную из uploads
После такого удаления в базе остаются записи вложений, а в медиатеке появляются битые элементы. Если уже удалили вручную, придётся отдельно чистить записи вложений и проверять контент на отсутствие ссылок на файл.
Путают дубли с миниатюрами
Файлы вида image-300x200.jpg — это не дубли, а производные размеры. Их удаление вручную может сломать отображение в теме или в блоках.
Не проверяют сторонние плагины
Некоторые плагины галерей, слайдеров и конструкторов хранят ссылки на изображения не только в контенте, но и в своих метаполях. Если чистить медиа без проверки, можно потерять изображения в виджетах, слайдерах и кастомных блоках.
Практические советы по безопасности и производительности
Если медиаархив большой, не делайте массовую очистку в рабочее время. На живом сайте лучше:
- сначала прогнать проверку на staging-копии;
- сделать полный бэкап базы и uploads;
- удалять партиями, а не одним большим запросом;
- после очистки пересобрать кеш и проверить несколько страниц с разными типами изображений;
- если сайт на слабом хостинге, не запускать тяжёлые скрипты через браузер — лучше через WP-CLI или временный CLI-скрипт.
Если вам нужен более широкий аудит дублей и мусора на сайте, в том числе по мета-тегам, неиспользуемым данным и технической чистке, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином логика проверки остаётся той же: сначала найти кандидатов, потом подтвердить, что они не используются.
Если после очистки изображения продолжают дублироваться при загрузке, проверьте настройки темы и плагинов, которые могут создавать дополнительные размеры, а также права на папку uploads. Иногда проблема не в старых файлах, а в том, что система каждый раз генерирует лишние копии из-за кастомных размеров.