В процессе эксплуатации сайта на WordPress с течением времени в медиабиблиотеке накапливается большое количество изображений, многие из которых уже не используются. Это приводит к увеличению размера базы данных и занимаемого дискового пространства, что негативно влияет на производительность и скорость резервного копирования. В этой статье рассмотрим, как автоматически удалять старые и неиспользуемые изображения в WordPress с помощью кода и плагинов.
Почему важно удалять неиспользуемые изображения
Многие пользователи загружают изображения для различных целей, но потом они остаются на сервере, даже если уже не вставлены в записи или страницы. Это создает:
- Занятое дисковое пространство на хостинге.
- Увеличение размера базы данных при использовании плагинов, которые хранят метаданные о медиа.
- Проблемы с производительностью сайта и бэкапов.
Автоматизация удаления таких изображений поможет поддерживать чистоту и уменьшить нагрузку.
Как найти неиспользуемые изображения в WordPress
Для начала нужно определить, какие изображения не используются на сайте. Это можно сделать вручную, но лучше использовать автоматизированные решения.
Использование плагинов для поиска неиспользуемых медиафайлов
Среди популярных плагинов для этой задачи:
- Media Cleaner - анализирует базу данных и файлы в /uploads, выявляя неиспользуемые и удаляя их с возможностью восстановления.
- WP-Optimize - в разделе оптимизации базы данных есть функция очистки неиспользуемых файлов.
- WPGPT от WPSHOP - умеет рекомендовать оптимизации, включая очистку.
Однако использование плагинов требует осторожности: всегда делайте резервную копию перед удалением.
Автоматическое удаление старых изображений с помощью кода
Если нужно более точное и кастомное решение, можно написать функцию, которая будет запускаться по CRON и удалять изображения, не прикрепленные к записям и не используемые в содержимом.
Пример функции для поиска и удаления неиспользуемых изображений
function wptricks_delete_unused_images() {
global $wpdb;
// Получаем все ID вложений типа 'attachment' с mime типом изображения
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли вложение в контенте
$file_used = false;
// 1. Проверка на прикрепленность к записи
$parent_id = wp_get_post_parent_id($attachment_id);
if ($parent_id) {
$file_used = true;
}
// 2. Проверка, встречается ли URL изображения в контенте сайта
if (!$file_used) {
$url = wp_get_attachment_url($attachment_id);
$query = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1", '%' . $wpdb->esc_like($url) . '%');
$found = $wpdb->get_var($query);
if ($found) {
$file_used = true;
}
}
// Если не используется, удаляем
if (!$file_used) {
wp_delete_attachment($attachment_id, true);
}
}
}
// Добавляем задачу в WP-Cron, например, раз в неделю
if (!wp_next_scheduled('wptricks_weekly_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wptricks_weekly_cleanup');
}
add_action('wptricks_weekly_cleanup', 'wptricks_delete_unused_images');
Эта функция проверяет каждое изображение: если оно не прикреплено к записи и не встречается в содержимом сайта, оно удаляется безвозвратно. Настройте периодичность запуска под свои нужды.
Дополнительные рекомендации по работе с изображениями
Оптимизация изображений при загрузке
Для снижения нагрузки и экономии места рекомендуется использовать плагины сжатия и оптимизации, например:
- Imagify
- ShortPixel
- WPGPT Image Optimizer от WPSHOP
Они автоматически сжимают изображения при загрузке, что уменьшает размер файлов и ускоряет загрузку страниц.
Использование CDN и lazy load
Для ускорения загрузки сайта и снижения нагрузки на сервер рекомендуем использовать CDN (Content Delivery Network) и ленивую загрузку изображений. В WordPress с версии 5.5 есть встроенный loading="lazy" для <img>.
Выводы и практические советы
- Регулярно проверяйте медиабиблиотеку на наличие неиспользуемых изображений.
- Используйте автоматизацию через WP-Cron и кастомные функции для удаления старых файлов.
- Перед удалением всегда делайте резервную копию сайта.
- Используйте плагины оптимизации изображений для снижения нагрузки.
- Комбинируйте автоматическое удаление и оптимизацию для максимальной эффективности.
Такой подход позволит поддерживать медиабиблиотеку в чистоте, улучшить производительность сайта и снизить затраты на хостинг.