Почему важно удалять неиспользуемые медиа-файлы в WordPress
С течением времени в библиотеке медиа WordPress накапливаются файлы, которые больше не используются в контенте сайта. Они занимают место на сервере, замедляют резервное копирование и могут влиять на производительность сайта, особенно при использовании облачных хостингов с ограничениями по объему хранилища.
Автоматизация удаления таких файлов поможет поддерживать порядок без необходимости ручного перебора тысяч элементов.
Диагностика проблемы: как определить, что медиа-файлы не используются
Для начала нужно понять, какие именно медиа-файлы не привязаны к записям, страницам, виджетам или метаданным. В WordPress медиафайлы могут быть связаны с:
- контентом постов/страниц (вставленные изображения и файлы);
- обложками записей (featured images);
- пользовательскими полями;
- виджетами и настройками темы;
- плагинами, которые могут хранить ссылки на файлы в своих таблицах.
Самый простой способ диагностики — найти файлы, не привязанные к записям в wp_posts с типом attachment.
SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;Файлы с post_parent = 0 не связаны с другими записями. Но это не всегда значит, что их можно удалить, так как ссылки на них могут быть в контенте, метаданных или настройках.
Пошаговое решение: автоматизация удаления неиспользуемых медиа-файлов
Шаг 1. Создаем резервную копию сайта и базы данных
Перед удалением любых файлов сделайте полную резервную копию. Это позволит восстановить данные при ошибках.
Шаг 2. Устанавливаем плагин для поиска неиспользуемых медиа
Рекомендуется использовать плагин Media Cleaner. Он анализирует базу и файлы, выявляет неиспользуемые медиа. Бесплатная версия подходит для небольших сайтов, для больших рекомендуют PRO версию.
Шаг 3. Запускаем сканирование и проверяем результаты
После установки и активации плагина перейдите в Медиа > Media Cleaner и запустите анализ. Плагин покажет список файлов, которые не связаны с записями или контентом.
Шаг 4. Тщательно проверяем список перед удалением
Обязательно просмотрите список, чтобы избежать удаления файлов, которые могут использоваться в плагинах или настройках. Особое внимание уделите файлам, которые не отображаются в стандартных местах.
Шаг 5. Автоматизируем удаление с помощью WP-CLI
Для регулярного очищения можно настроить WP-CLI скрипт, который будет удалять неиспользуемые медиа. Пример команды, которая удаляет медиафайлы с post_parent = 0 и не используемые в содержимом:
wp media list --field=ID --post_parent=0 | xargs -d ' ' wp media delete --yes<Но перед этим стоит провести дополнительную фильтрацию, чтобы не удалить нужные файлы.
Шаг 6. Пишем кастомный код для удаления неиспользуемых медиа (опционально)
Если плагин не подходит, можно написать скрипт, который проверит использование файла в контенте и удалит неиспользуемые. Пример функции:
function delete_unused_attachments() {
global $wpdb;
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");
foreach ($attachments as $attachment) {
$id = $attachment->ID;
$url = $attachment->guid;
// Проверяем, есть ли URL файла в контенте
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
if ($count == 0) {
wp_delete_attachment($id, true);
error_log("Deleted attachment ID: $id");
}
}
}Этот код ищет файлы, которые не упоминаются в контенте записей и удаляет их с сервера и базой.
Проверка результата после внедрения
- Зайдите в
Медиафайлыи убедитесь, что количество файлов уменьшилось; - Проверьте страницы и записи, где использовались изображения, на предмет ошибок загрузки;
- Посмотрите логи ошибок сервера на предмет удаленных файлов;
- Запустите скрипт или плагин повторно, чтобы убедиться, что не осталось неиспользуемых файлов.
Частые ошибки и как их исправить
- Удаление файлов, используемых в настройках или плагинах. Решение: проверяйте все места использования, включая метаданные, виджеты и плагинные таблицы. Используйте инструменты с возможностью ручного подтверждения удаления.
- Неполное удаление медиа — файлы остаются на сервере после удаления из базы. Решение: использовать
wp_delete_attachment($id, true)с параметромtrue, чтобы удалять файлы физически. - Ошибка при массовом удалении через WP-CLI из-за больших объемов. Решение: разбивайте удаление на порции, используйте скрипты с ограничением количества обработанных файлов за один запуск.
Практические советы по безопасности и производительности
- Не удаляйте файлы без резервной копии, чтобы избежать потери данных.
- Проводите очистку на тестовом сервере перед внедрением в продакшн.
- Оптимизируйте запросы к базе, чтобы не нагружать сервер при анализе больших объемов данных.
- Для сайтов с WooCommerce учитывайте, что изображения товаров тоже могут быть не связаны напрямую, но нужны для отображения.
Сравнение методов удаления неиспользуемых медиа
| Метод | Плюсы | Минусы | Подходит для |
|---|---|---|---|
| Плагин Media Cleaner | Интерфейс, тщательный анализ, поддержка PRO | Платные функции для больших сайтов, может пропустить файлы в нестандартных местах | Средние и крупные сайты, удобство |
| WP-CLI скрипты | Автоматизация, быстрое выполнение, скрипты под себя | Требует навыков, риск удаления нужных файлов без проверки | Опытные разработчики, автоматизация |
| Кастомный PHP-код | Максимальный контроль, интеграция с бизнес-логикой | Сложность поддержки, затраты времени | Уникальные кейсы, нестандартные сайты |