Современные сайты на WordPress часто сталкиваются с проблемой накопления большого количества изображений, которые уже не используются на сайте. Это может существенно замедлять работу сайта и увеличивать размер резервных копий. В этой статье мы подробно разберём, как автоматически удалять старые и неиспользуемые изображения в WordPress, чтобы оптимизировать пространство и улучшить производительность.
Почему важно удалять старые изображения в WordPress
Изображения занимают значительную часть дискового пространства на сервере. При частом обновлении контента, смене дизайна или удалении постов, файлы изображений часто остаются в медиатеке без использования. Это приводит к:
- Увеличению размера базы данных и файлов сайта;
- Замедлению работы сайта и бэкапов;
- Росту затрат на хостинг;
- Потере контроля над контентом.
Регулярное удаление старых и неиспользуемых изображений помогает поддерживать сайт в оптимальном состоянии.
Как определить старые и неиспользуемые изображения
Старые изображения — это те, которые не были использованы в публикациях, страницах или других типах контента в течение определённого времени. Неиспользуемые — это вообще не привязанные к контенту файлы, которые занимают место в папке uploads.
Для определения таких изображений можно использовать разные подходы:
- Поиск ссылок на изображения в базе данных;
- Проверка времени загрузки и последнего использования;
- Использование плагинов для анализа медиатеки.
Далее рассмотрим практические методы удаления.
Автоматическое удаление старых изображений с помощью кода
Можно создать пользовательский скрипт, который будет искать и удалять неиспользуемые изображения старше определённого времени. Пример кода для файла functions.php вашей темы или в виде отдельного плагина:
function wpcourse_delete_old_unused_images() {
global $wpdb;
$days = 90; // Количество дней, старше которых изображения считаются старыми
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем 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",
$date_threshold
));
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли изображение в контенте
$meta = wp_get_attachment_metadata($attachment_id);
$url = wp_get_attachment_url($attachment_id);
if (!$url) continue;
// Проверка ссылок на изображение в базе данных
$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($attachment_id, true);
}
}
}
// Запускаем функцию раз в сутки через WP-Cron
if (!wp_next_scheduled('wpcourse_daily_delete_images')) {
wp_schedule_event(time(), 'daily', 'wpcourse_daily_delete_images');
}
add_action('wpcourse_daily_delete_images', 'wpcourse_delete_old_unused_images');
Этот код создаёт ежедневное задание, которое удаляет изображения старше 90 дней, не используемые в контенте. Обязательно протестируйте на тестовом сайте, чтобы избежать удаления нужных файлов.
Использование плагинов для автоматического удаления изображений
Если вы не хотите писать код, существуют плагины, которые помогают управлять медиатекой:
- Media Cleaner — анализирует медиафайлы и находит неиспользуемые, позволяет массово удалять;
- Image Cleanup — похожий функционал, с возможностью фильтрации по датам;
- WP-Optimize — плагин для оптимизации базы данных, включая удаление мусорных изображений.
Важно: перед удалением файлов с помощью плагинов делайте резервные копии сайта.
Советы по безопасному удалению и управлению изображениями
Удаление изображений — операция, требующая осторожности. Вот несколько рекомендаций:
- Всегда делайте резервную копию сайта перед массовым удалением;
- Настраивайте фильтры удаления по дате и использованию;
- Проверяйте логи и отчёты плагинов;
- Используйте тестовую среду для проверки скриптов и плагинов;
- Регулярно проводите аудит медиатеки.
Для автоматизации некоторых процессов очистки можно использовать плагин Clearfy Pro, который содержит функции оптимизации и очистки базы данных.
Пример реализации пользовательского шорткода для вывода количества удалённых изображений
Для контроля можно добавить шорткод, который будет показывать, сколько изображений было удалено за последний запуск:
function wpcourse_show_deleted_images_count() {
$count = get_option('wpcourse_deleted_images_count', 0);
return '<p>За последний запуск удалено изображений: ' . intval($count) . '</p>';
}
add_shortcode('deleted_images_count', 'wpcourse_show_deleted_images_count');
// В функции удаления в конце добавьте сохранение количества
// Например, в функции wpcourse_delete_old_unused_images считайте удалённые файлы и сохраняйте:
// update_option('wpcourse_deleted_images_count', $deleted_count);
Это поможет отслеживать эффективность очистки без захода в админку.
Заключение
Автоматическое удаление старых и неиспользуемых изображений — важная задача для поддержания производительности и чистоты WordPress сайта. Использование приведённого кода или специализированных плагинов позволяет решать эту проблему системно и без лишних усилий. Помните про резервные копии и тестирование перед применением изменений на живом сайте.