Со временем медиабиблиотека WordPress накапливает множество файлов, которые уже не используются на сайте. Это не только занимает место на сервере, но и может замедлять работу сайта и создавать беспорядок в админке. В этой статье расскажем, как безопасно удалить старые медиафайлы, которые не привязаны к записям или страницам, используя проверенные плагины и собственные скрипты.
Почему важно удалять неиспользуемые медиафайлы
Медиафайлы в WordPress хранятся в папке wp-content/uploads и управляются через медиабиблиотеку. С течением времени там накапливается много мусора — картинки, загруженные для тестов, прежние версии изображений, или файлы, которые перестали использоваться после редизайна сайта.
Удаление таких файлов помогает:
- Освободить дисковое пространство на хостинге.
- Уменьшить нагрузку на бэкапы и ускорить их создание.
- Сделать медиабиблиотеку удобнее и понятнее для редактирования.
Но важно не удалить файлы, которые действительно используются, иначе на сайте появятся битые ссылки и отсутствующие изображения.
Как определить, какие медиафайлы не используются
Ручной поиск через админку WordPress
В стандартной медиабиблиотеке WordPress можно фильтровать файлы по привязке к записям (например, «Не прикрепленные»). Однако это не всегда означает, что файл не используется на сайте, так как он мог быть вставлен напрямую через URL в контент.
Поэтому ручной способ подходит только для первичного отбора и не гарантирует 100% точность.
Использование плагинов для поиска неиспользуемых медиафайлов
Существуют плагины, которые анализируют базу данных и контент сайта, чтобы определить, какие файлы не используются. Среди них:
- Media Cleaner — один из самых популярных бесплатных плагинов для поиска и удаления мусорных медиафайлов. Имеет платную версию с расширенными возможностями.
- Clearfy Pro — многофункциональный оптимизатор, который также помогает работать с медиафайлами и удалять неиспользуемые.
Перед использованием любого плагина обязательно сделайте полную резервную копию сайта и базы данных.
Удаление неиспользуемых медиафайлов с помощью плагина Media Cleaner
Рассмотрим пример работы с Media Cleaner:
- Установите и активируйте плагин из репозитория WordPress.
- Зайдите в меню "Media Cleaner" в админке.
- Запустите сканирование медиабиблиотеки. Плагин проанализирует файлы и укажет, какие из них не привязаны к записям и не найдены ни в каком контенте.
- Внимательно просмотрите список, чтобы исключить важные файлы — иногда плагин может ошибиться.
- Удалите выбранные файлы через интерфейс плагина.
Такой способ подходит для большинства сайтов, но требует внимательности и резервного копирования.
Пример кастомного скрипта для поиска неиспользуемых медиа по базе данных
Если вы хотите более тонко контролировать процесс и умеете работать с базой данных, можно написать собственный скрипт, который найдет медиафайлы, не используемые в записях. Ниже пример функции для файла functions.php вашей темы или плагина:
function wpin_find_unused_media_files() {
global $wpdb;
// Получаем все ID вложений
$all_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
// Получаем все ID вложений, которые используются в постах (в метаполях и контенте)
$used_attachments = [];
// Ищем вложения в мета-полях
$meta_ids = $wpdb->get_col("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id'");
foreach ($meta_ids as $id) {
if (is_numeric($id)) {
$used_attachments[] = intval($id);
}
}
// Ищем вложения в контенте (по ID вложения)
$query = "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type IN ('post', 'page')";
$posts = $wpdb->get_results($query);
foreach ($posts as $post) {
foreach ($all_attachments as $att_id) {
if (strpos($post->post_content, 'wp-image-' . $att_id) !== false) {
$used_attachments[] = $att_id;
}
}
}
// Убираем дубликаты
$used_attachments = array_unique($used_attachments);
// Находим неиспользуемые вложения
$unused = array_diff($all_attachments, $used_attachments);
return $unused;
}
// Использование: получить список ID неиспользуемых медиафайлов
$unused_files = wpin_find_unused_media_files();
if (!empty($unused_files)) {
echo 'Найдено неиспользуемых файлов: ' . count($unused_files) . "\n";
foreach ($unused_files as $id) {
echo 'ID: ' . $id . "\n";
}
} else {
echo 'Все файлы используются на сайте.';
}
Этот скрипт собирает ID всех вложений, затем проверяет, используются ли они в мета-данных (например, как миниатюры) и в содержимом записей (по классу wp-image-ID), после чего возвращает список неиспользуемых вложений.
Вы можете расширить логику, добавив проверку кастомных полей, виджетов и других мест, где могут использоваться медиафайлы.
Удаление найденных неиспользуемых медиафайлов программно
После того, как вы собрали список ID неиспользуемых файлов, их можно удалить программно, используя функцию wp_delete_attachment(). Пример:
foreach ($unused_files as $attachment_id) {
wpin_delete_unused_media_file($attachment_id);
}
function wpin_delete_unused_media_file($attachment_id) {
// Удаляем вложение и все связанные файлы
wp_delete_attachment($attachment_id, true);
}
Обратите внимание, что параметр true в функции wp_delete_attachment гарантирует удаление файлов с диска.
Рекомендации по безопасности и резервному копированию
Удаление медиафайлов — операция необратимая, особенно если вы удаляете файлы не через корзину WordPress, а напрямую. Чтобы не потерять важные данные, обязательно:
- Создайте полную резервную копию сайта, включая базу данных и папку uploads.
- Проверьте результаты сканирования несколько раз, особенно если используете автоматические инструменты.
- Если не уверены, сначала перенесите найденные файлы в отдельную папку, а удаляйте спустя несколько дней, если не будет жалоб.
Дополнительные полезные инструменты и плагины
Кроме Media Cleaner и Clearfy Pro, можно рекомендовать:
- Force Regenerate Thumbnails — для удаления и восстановления миниатюр, что помогает освободить место.
- WPRemark — если вы используете в проекте отзывы с изображениями, этот плагин поможет управлять ими и оптимизировать.
Также регулярная оптимизация базы данных и очистка старых ревизий записей помогут поддерживать сайт в хорошем состоянии.