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

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

Почему в медиабиблиотеке появляются дубликаты файлов

Дубликаты могут появляться по нескольким причинам:

  • Повторные загрузки одних и тех же файлов через админку или FTP.
  • Автоматическое создание копий при обновлении медиа или импорте.
  • Сторонние плагины, создающие резервные копии или кешированные версии.
  • Ошибки при миграции сайта или импортировании контента.

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

Как найти дубликаты файлов в медиабиблиотеке WordPress

Самый простой способ — использовать плагины. Например:

  • Clearfy Pro — имеет модуль для поиска дубликатов файлов и медиа, с возможностью их удаления.
  • Media Deduper — бесплатный плагин с функцией поиска и удаления дубликатов.

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

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

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

function wpupload_find_duplicate_files() {
    global $wpdb;

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

    $files = [];
    $duplicates = [];

    foreach ($attachments as $attachment) {
        $file_path = str_replace(wp_get_upload_dir()['baseurl'], wp_get_upload_dir()['basedir'], $attachment->guid);

        if (file_exists($file_path)) {
            $file_size = filesize($file_path);
            $file_name = basename($file_path);

            $key = md5($file_name . '_' . $file_size); // Ключ по имени и размеру

            if (isset($files[$key])) {
                $duplicates[] = [
                    'original_id' => $files[$key],
                    'duplicate_id' => $attachment->ID,
                    'file' => $file_name
                ];
            } else {
                $files[$key] = $attachment->ID;
            }
        }
    }

    return $duplicates;
}

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

Как автоматически удалить найденные дубликаты с помощью кода

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

function wpupload_delete_duplicate_files() {
    $duplicates = wpupload_find_duplicate_files();

    foreach ($duplicates as $dup) {
        // Удаляем файл из сервера
        $file_path = get_attached_file($dup['duplicate_id']);
        if (file_exists($file_path)) {
            unlink($file_path);
        }

        // Удаляем запись из медиабиблиотеки
        wp_delete_attachment($dup['duplicate_id'], true);

        // Для лога
        error_log("Удалён дубликат ID: {$dup['duplicate_id']} файл: {$dup['file']}");
    }
}

Рекомендуется сначала запускать только функцию поиска, проверять результаты и делать резервную копию сайта перед удалением.

Дополнительные способы оптимизации медиабиблиотеки

Использование WP-CLI для управления медиа

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

Интеграция с плагинами оптимизации

Плагины вроде Clearfy Pro не только находят дубликаты, но и умеют оптимизировать базу данных, удалять ревизии и ненужные метаданные, что помогает держать медиабиблиотеку в порядке.

Профилактические меры для предотвращения дубликатов

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

Заключение по теме удаления дубликатов

Удаление повторяющихся файлов — важная задача для поддержания производительности и удобства работы с WordPress. Использование приведённого кода в сочетании с проверенными плагинами позволит эффективно контролировать медиабиблиотеку и экономить дисковое пространство.

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

Как отключить Gutenberg и вернуть классический редактор в WordPress
06.04.2026
Как разрешить и использовать WooCommerce REST API в WordPress
09.11.2025
Автоматическое удаление товаров в WooCommerce по сроку хранения
23.04.2026
Как делать автоматические резервные копии файлов в WordPress
31.01.2026
Как автоматически удалять файлы WooCommerce после отмены заказа без плагинов
25.05.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.