В процессе эксплуатации сайта на WordPress с каждым днем в медиа-библиотеке накапливается множество изображений, многие из которых становятся неактуальными и занимают место на сервере. В этой статье подробно рассмотрим, как настроить автоматическое удаление старых изображений, чтобы оптимизировать пространство и повысить производительность сайта.
Почему важно удалять старые изображения в WordPress
Каждое изображение занимает дисковое пространство и влияет на скорость бэкапов, загрузку сайта и даже стоимость хостинга. Особенно остро эта проблема стоит для сайтов с большим объемом контента, например, новостных порталов или интернет-магазинов.
Удаление неиспользуемых и устаревших изображений позволяет:
- Освободить место на сервере;
- Уменьшить время резервного копирования;
- Сократить время загрузки страниц;
- Снизить расходы на хостинг при оплате за объем диска.
Однако вручную искать и удалять старые изображения неудобно и долго, поэтому автоматизация этого процесса — отличное решение.
Как определить, какие изображения можно удалять
Для автоматизации важно корректно определить критерии, по которым изображения будут считаться старыми и неиспользуемыми. Основные подходы:
- Возраст изображения. Например, удалять изображения старше 1 года, если они не используются в публикациях.
- Неиспользуемость. Изображения, которые не прикреплены к каким-либо материалам, галереям или не используются в контенте.
- Комбинация критериев. Старое и неиспользуемое одновременно.
Обратите внимание, что просто удалять все старые изображения не всегда безопасно — некоторые из них могут быть использованы в виджетах, настройках тем или плагинов.
Использование плагинов для автоматического удаления старых изображений
Для решения задачи можно использовать готовые плагины. Вот несколько популярных вариантов:
1. Media Cleaner
Плагин анализирует медиа-библиотеку и определяет неиспользуемые картинки и файлы. Он предлагает безопасное удаление с возможностью восстановления.
2. WP-Optimize
Кроме оптимизации базы данных, WP-Optimize умеет удалять неиспользуемые изображения, тем самым экономя место.
3. Image Cleanup
Плагин позволяет фильтровать и удалять медиафайлы по дате и связям с контентом.
Однако для более гибкой настройки и интеграции лучше использовать кастомные решения.
Автоматизация удаления старых изображений с помощью кода
Рассмотрим пример кода, который поможет автоматически удалять изображения, которые не используются в записях и старше заданного срока.
Код можно добавить в файл functions.php вашей темы или создать отдельный мини-плагин.
function wpmy_delete_old_unused_images() {
$days_old = 180; // Удалять изображения старше 180 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));
global $wpdb;
// Получаем ID вложений (изображений), которые старше даты и не прикреплены к записям
$attachments = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_mime_type LIKE 'image/%%'
AND post_date < %s
AND ID NOT IN (SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id')
AND post_parent = 0",
$date_threshold
));
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли изображение в содержимом других записей
$file_url = wp_get_attachment_url($attachment_id);
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($count == 0) {
// Удаляем изображение навсегда
wp_delete_attachment($attachment_id, true);
}
}
}
// Запускаем функцию по расписанию WP-Cron, например, раз в неделю
if (!wp_next_scheduled('wpmy_weekly_delete_old_images')) {
wp_schedule_event(time(), 'weekly', 'wpmy_weekly_delete_old_images');
}
add_action('wpmy_weekly_delete_old_images', 'wpmy_delete_old_unused_images');В этом коде мы:
- Определяем срок давности в 180 дней;
- Находим изображения без родительских записей и не являющиеся миниатюрами;
- Проверяем, используются ли они в содержимом других записей;
- Удаляем те, что не используются;
- Автоматизируем запуск задачи через WP-Cron раз в неделю.
Дополнительные рекомендации по безопасности
Перед внедрением автоматического удаления важно:
- Сделать резервную копию сайта и базы данных;
- Тестировать код на тестовом сервере;
- Добавить логирование удалений для контроля;
- При необходимости предусмотреть возможность отмены удаления (например, перемещать в корзину WordPress, а не удалять сразу);
- Учитывать использование изображений в плагинах и виджетах, которые могут не иметь прямых ссылок в постах.
Для логирования можно расширить функцию, например, записывая ID удаленных вложений в отдельный файл или таблицу базы данных.
Заключение
Автоматическое удаление старых изображений в WordPress — важный шаг к оптимизации сайта и экономии ресурсов. Выбор между плагинами и кастомными решениями зависит от ваших задач, опыта и требований к безопасности.
Если хотите более функциональный и гибкий инструмент, советую обратить внимание на Media Cleaner — он отлично подходит для профессиональной очистки медиа-библиотеки.
Также не забывайте регулярно проводить аудит медиафайлов и следить за их использованием, чтобы избежать случайного удаления важных изображений.