В процессе эксплуатации сайта на WordPress в библиотеке медиа накапливаются файлы, которые уже не используются на страницах и в записях. Такие файлы занимают место на сервере, замедляют резервное копирование и усложняют управление сайтом. В этой статье мы подробно разберем, как эффективно найти и удалить неиспользуемые медиафайлы, используя как готовые плагины, так и собственные скрипты.
Почему важно удалять неиспользуемые медиа файлы
Медиафайлы — это изображения, видео, аудио и другие документы, загруженные в WordPress. С течением времени многие из них перестают быть актуальными: картинки удаленных постов, временные файлы, дубликаты и прочие. Если их не удалять, возникают следующие проблемы:
- Занятие места на хостинге. Особенно критично для сайтов с ограниченным дисковым пространством.
- Ухудшение производительности. Большое количество медиафайлов замедляет работу библиотеки и бэкапов.
- Сложность управления. Трудно ориентироваться в библиотеке, повышается риск случайного использования устаревших изображений.
Удаление неиспользуемых файлов помогает поддерживать сайт в оптимальном состоянии.
Как найти неиспользуемые медиафайлы в WordPress
Использование плагинов для поиска неиспользуемых файлов
Самый простой способ — воспользоваться плагинами, которые анализируют всю базу и выявляют файлы без связей с контентом.
- Media Cleaner — мощный и популярный плагин, который сканирует библиотеку и проверяет использование файлов в постах, страницах, виджетах и даже в произвольных полях. Он предлагает безопасное удаление с возможностью восстановления.
- DNUI (Delete Not Used Image) — более легкий и простой инструмент, который быстро анализирует контент и находит неиспользуемые изображения.
Для установки выполните следующие шаги:
- Перейдите в админ-панель WordPress → Плагины → Добавить новый.
- Введите в поиске название плагина, например, "Media Cleaner".
- Установите и активируйте плагин.
- Перейдите в настройки плагина и запустите сканирование.
После анализа вы увидите список файлов, которые можно удалить или проверить вручную.
Поиск неиспользуемых медиафайлов с помощью SQL-запросов
Если вы предпочитаете не использовать плагины, можно выполнить запросы к базе данных для выявления файлов, которые не прикреплены к записям.
Пример запроса для поиска вложений, не связанных с постами:
SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key = '_thumbnail_id');Этот запрос вернет вложения, которые не используются как миниатюры. Однако он не учитывает другие случаи использования, например, вставки файлов непосредственно в контент или ссылки в виджетах.
Чтобы получить более полный список, придется расширять логику или использовать регулярные выражения для поиска ссылок на медиафайлы в содержимом.
Удаление неиспользуемых медиафайлов с помощью кода
Пример функции для удаления медиафайлов без использования контента
Ниже приведен пример простой функции для WordPress, которая ищет вложения, не связанные с постами, и удаляет их. В реальных условиях рекомендуется делать резервную копию перед запуском.
function wp_gpt_delete_unused_attachments() {
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
'meta_query' => [
[
'key' => '_wp_attached_file',
'compare' => 'EXISTS'
]
]
];
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
$attachment_id = $attachment->ID;
// Проверяем, используется ли вложение где-либо
$is_used = false;
// Проверка на миниатюру
$thumb_posts = get_posts([
'meta_key' => '_thumbnail_id',
'meta_value' => $attachment_id,
'post_type' => 'any',
'posts_per_page' => 1
]);
if ($thumb_posts) {
$is_used = true;
}
// Проверка в содержимом постов
if (!$is_used) {
$content_posts = get_posts([
's' => wp_get_attachment_url($attachment_id),
'post_type' => 'any',
'posts_per_page' => 1
]);
if ($content_posts) {
$is_used = true;
}
}
if (!$is_used) {
// Удаляем вложение
wp_delete_attachment($attachment_id, true);
}
}
}
// Запуск функции через WP-CLI или вручную
// wp_gpt_delete_unused_attachments();Эта функция проверяет вложения на использование в качестве миниатюры и наличие ссылки в содержимом. Если файл не используется, он удаляется с диска.
Дополнительные рекомендации и советы
Резервное копирование перед удалением
Всегда делайте резервную копию базы данных и файлов сайта перед очисткой медиа. Ошибка может привести к потере важных данных.
Оптимизация изображений после очистки
После удаления неиспользуемых файлов имеет смысл оптимизировать оставшиеся медиафайлы с помощью плагинов, например:
- Smush — сжимает изображения без потери качества.
- ShortPixel — продвинутый инструмент с возможностью пакетной оптимизации.
Автоматизация удаления через WP-CLI
Для удобства можно создать WP-CLI команду, которая будет запускать функцию очистки медиафайлов. Это позволяет автоматизировать процесс и интегрировать его в задачи по обслуживанию сайта.
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wp_gpt clean-unused-media', function() {
wp_gpt_delete_unused_attachments();
WP_CLI::success('Неиспользуемые медиафайлы удалены');
});
}Запускать можно в терминале командой wp wp_gpt clean-unused-media.
Заключение
Удаление неиспользуемых медиафайлов — важный этап поддержки чистоты и производительности сайта на WordPress. Используйте проверенные плагины для быстрого результата и собственный код для тонкой настройки и автоматизации. Регулярная очистка поможет избежать проблем с хранением и ускорит работу сайта.