Повторяющиеся файлы в медиабиблиотеке 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 — он отлично дополняет ручные решения и автоматизирует многие задачи.