Со временем в медиабиблиотеке WordPress накапливается огромное количество изображений, которые больше не используются на сайте. Это приводит к росту размера базы данных и замедлению резервного копирования, а также увеличивает места на сервере. В этой статье подробно разберём, как автоматически находить и удалять старые и неиспользуемые изображения из медиабиблиотеки, используя как готовые плагины, так и собственный код.
Почему важно удалять неиспользуемые изображения
Каждое загруженное изображение занимает место на сервере и в базе данных. Даже если оно не отображается на страницах сайта, оно остаётся в медиабиблиотеке и резервных копиях. Удаление таких файлов помогает:
- Сократить размер резервных копий;
- Ускорить работу медиабиблиотеки;
- Оптимизировать использование дискового пространства;
- Улучшить производительность сайта и скорость загрузки бэкапов.
При этом важно не удалять изображения, которые могут использоваться динамически или в кастомных полях, поэтому автоматизация требует аккуратного подхода.
Как определить, какие изображения не используются
Для поиска неиспользуемых изображений необходимо проверить, присутствует ли ссылка на них в:
- Контенте записей и страниц;
- Виджетах и меню;
- Кастомных полях и метаданных;
- Шаблонах и слайдерах;
- Плагинах, которые могут хранить ссылки на изображения в своих таблицах.
Полный анализ вручную — трудоёмкая задача, поэтому мы рассмотрим подходы к её автоматизации.
Использование плагинов для удаления неиспользуемых изображений
Существует несколько популярных плагинов, которые помогают находить и удалять неиспользуемые файлы:
1. Media Cleaner
Один из самых известных плагинов для очистки медиабиблиотеки. Он сканирует базу данных и файлы, ищет неиспользуемые медиафайлы и позволяет безопасно их удалить.
Особенности:
- Анализ контента и базы данных;
- Игнорирование определённых папок и файлов;
- Поддержка сторонних плагинов и конструкторов;
- Резервное копирование перед удалением.
Скачать и узнать подробности можно на WPGshop.ru.
2. WP-Optimize
Этот плагин сочетает очистку базы данных и оптимизацию изображений. Он умеет удалять неиспользуемые изображения, особенно если они не привязаны к записям.
Преимущества:
- Оптимизация базы данных;
- Сжатие изображений;
- Удаление временных файлов;
- Простой интерфейс.
Автоматическое удаление старых изображений с помощью кода
Если хочется реализовать автоматическое удаление без сторонних плагинов, можно написать собственный скрипт, который будет находить и удалять неиспользуемые изображения старше определённого срока.
Пример функции, которая ищет изображения, не привязанные к записям, и удаляет их, если они старше 30 дней:
function wplessons_delete_old_unused_images() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID вложений (изображений) старше $days дней
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
$date_threshold
));
foreach ($attachments as $attachment) {
$id = $attachment->ID;
// Проверяем, есть ли ссылки на изображение в контенте записей
$meta = get_post_meta($id);
$is_used = false;
// Проверка в контенте
$query = $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_content LIKE %s LIMIT 1",
'%"' . wp_get_attachment_url($id) . '"%'
);
$post_exists = $wpdb->get_var($query);
if ($post_exists) {
$is_used = true;
}
// Проверяем метаданные
if (!$is_used && !empty($meta)) {
$is_used = true;
}
// Если не используется, удаляем
if (!$is_used) {
wp_delete_attachment($id, true);
}
}
}
// Добавляем в крон для регулярного запуска
if (!wp_next_scheduled('wplessons_cron_delete_old_images')) {
wp_schedule_event(time(), 'daily', 'wplessons_cron_delete_old_images');
}
add_action('wplessons_cron_delete_old_images', 'wplessons_delete_old_unused_images');Этот скрипт проверяет все изображения старше 30 дней, ищет ссылки на них в постах и метаданных, и если не находит — удаляет.
Важно: перед использованием такого кода обязательно сделайте полный бэкап сайта, так как автоматическое удаление может привести к потере важных файлов.
Рекомендации по безопасности и резервному копированию
Перед автоматизацией удаления изображений обязательно:
- Создавайте резервные копии базы данных и файлов;
- Проверяйте работу скриптов на тестовой копии сайта;
- Исключайте из удаления важные папки и файлы, используемые плагинами и темами;
- Используйте логирование действий удаления для контроля.
Выводы и лучшие практики
Автоматическое удаление старых и неиспользуемых изображений — важная часть оптимизации WordPress сайтов. Для большинства пользователей проще и безопаснее использовать проверенные плагины, такие как Media Cleaner. Для опытных разработчиков и оптимизаторов можно настроить собственный скрипт с контролируемым удалением и регулярным запуском через WP-Cron.
Помните, что аккуратная работа с медиабиблиотекой помогает сохранить производительность сайта и минимизировать затраты на хостинг.