Как отключить дубли видеофайлов в WordPress и убрать лишние копии из медиабиблиотеки

Если в медиабиблиотеке WordPress начинают копиться одинаковые видеофайлы с суффиксами вроде -1, -2 или повторяющиеся загрузки в разных размерах, проблема обычно не в самом видео, а в том, как сайт принимает и обрабатывает файл. На практике это приводит к лишнему расходу диска, путанице в контенте и ошибкам при вставке роликов в записи.

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

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

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

Типичные признаки

  • в папке uploads лежат одинаковые файлы с разными именами;
  • в медиабиблиотеке есть несколько записей с одним и тем же роликом;
  • после импорта из плагина видео появляется и как вложение, и как отдельный медиа-объект;
  • при повторной загрузке WordPress добавляет суффикс -1, хотя исходный файл уже есть;
  • размер uploads растёт быстрее, чем число новых публикаций.

Что проверить в первую очередь

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

Откуда берутся дубли и как их остановить

Чаще всего проблема появляется в одном из трёх сценариев: повторная загрузка одного и того же файла, дублирование при импорте или конфликт плагинов, которые по-разному работают с вложениями. Если не убрать источник, чистка медиабиблиотеки даст только временный эффект.

ПодходЧто делаетПлюсыМинусы
Плагин для очистки медиаНаходит неиспользуемые вложения и дубликатыБыстро, удобно для контент-менеджераНужна проверка перед удалением, не все плагины видят связи в кастомных полях
Код в теме или mu-pluginЗапрещает повторную загрузку и нормализует имена файловКонтроль на уровне сайтаТребует тестирования и аккуратного деплоя
Ручная чистка через FTP/SSHУдаляет лишние файлы после аудитаТочно видно, что удаляетсяДолго и рискованно без бэкапа

Пошаговое решение: как отключить появление дублей

1. Проверьте, не создаёт ли дубли загрузчик

Если у вас есть кастомная форма загрузки видео, сначала убедитесь, что она не отправляет один и тот же файл повторно. Частая ошибка — повторный wp_handle_upload() при сабмите формы и при сохранении записи. В этом случае файл физически дублируется, а в медиабиблиотеке появляются две записи.

Для базовой защиты можно проверять хэш файла перед созданием вложения. Пример ниже не заменяет полноценную логику импорта, но помогает отсеять повторную загрузку одинакового файла:

<?php
add_filter('wp_handle_upload_prefilter', function ($file) {
    if (empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) {
        return $file;
    }

    $hash = md5_file($file['tmp_name']);
    if (!$hash) {
        return $file;
    }

    $existing = get_posts([
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'fields'         => 'ids',
        'posts_per_page' => 1,
        'meta_key'       => '_file_md5',
        'meta_value'     => $hash,
    ]);

    if (!empty($existing)) {
        return new WP_Error('duplicate_video', 'Такой файл уже загружен в медиабиблиотеку.');
    }

    $file['duplicate_hash'] = $hash;
    return $file;
});

add_filter('wp_generate_attachment_metadata', function ($metadata, $attachment_id) {
    $file = get_attached_file($attachment_id);
    if ($file && file_exists($file)) {
        update_post_meta($attachment_id, '_file_md5', md5_file($file));
    }
    return $metadata;
}, 10, 2);

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

2. Отключите лишние копии, если их создаёт плагин

Некоторые плагины для медиа, импорта или оптимизации могут сохранять отдельные копии исходника. Это особенно заметно, если плагин делает резервную версию файла до обработки. В настройках ищите опции вроде keep original, store backup, duplicate on import, save original file.

Если плагин не даёт отключить поведение, лучше заменить его или вынести обработку в отдельный этап, а не держать лишние копии на постоянной основе.

3. Нормализуйте имена файлов при загрузке

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

<?php
add_filter('wp_unique_filename', function ($filename, $ext, $dir, $unique_filename_callback) {
    $base = pathinfo($filename, PATHINFO_FILENAME);
    $normalized = sanitize_file_name($base) . $ext;

    if ($normalized !== $filename) {
        return $normalized;
    }

    return $filename;
}, 10, 4);

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

Как безопасно удалить уже накопившиеся дубли

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

Чек-лист перед удалением

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

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

find wp-content/uploads -type f \( -iname '*.mp4' -o -iname '*.webm' -o -iname '*.mov' \) -exec md5sum {} \; | sort | awk 'prev==$1 {print prev_file "\n" $2 "\n"} {prev=$1; prev_file=$2}'

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

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

После отключения источника дублей и удаления лишнего мусора важно убедиться, что сайт не начал ломать загрузку медиа.

Что проверить в админке

  • новый файл загружается один раз и не получает лишний суффикс;
  • в медиабиблиотеке не появляются одинаковые записи после одного импорта;
  • редактор может вставить видео в запись без ошибок;
  • старые записи продолжают открываться с корректными ссылками на медиа;
  • размер папки uploads перестал расти из-за повторов.

Что проверить на фронтенде

Откройте несколько старых и новых страниц с видео, проверьте исходный HTML и сетевые запросы в DevTools. Если видео подгружается через один и тот же URL, а не через цепочку повторных редиректов или битых ссылок, значит чистка прошла без побочных эффектов.

Если используете кэш или CDN, не забудьте сбросить кэш после удаления файлов. Иначе на фронтенде может остаться ссылка на уже удалённый объект.

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

Удалили файл, который ещё используется в записи

Такое случается, если ориентироваться только на имя файла. Исправление простое: восстановить файл из бэкапа и повторно проверить связи через поиск по базе или через инструмент аудита медиа.

Плагин очистки показал файл как лишний, но он нужен в кастомном поле

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

После запрета дублей перестали загружаться новые видео

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

Сломались ссылки после ручной чистки

Это бывает, если удаляли файлы напрямую из папки uploads, не трогая записи в базе. Правильный порядок такой: сначала найти и снять привязку, потом удалить физический файл, затем очистить кэш и проверить страницы.

Что делать для безопасности и производительности дальше

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

Ещё один практичный шаг — регулярно проверять медиабиблиотеку на неиспользуемые вложения и старые копии. Если нужен более системный подход к чистке дублей, дублей в базе и мусора в админке, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином не стоит пропускать ручную проверку перед удалением.

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

Как автоматически оптимизировать видео при загрузке в WordPress
06.07.2026
Как добавить автоматическое отключение звука видео в WordPress
09.03.2026
Как исправить проблему: не показывается видео при загрузке в WordPress
16.06.2026
Как автоматически добавлять видео в корзину WooCommerce на WordPress
25.06.2026
Как удалить водяной знак с видео в WordPress без потери производительности
09.04.2026