В процессе эксплуатации сайта на WordPress часто накапливаются неиспользуемые изображения, особенно крупные, которые занимают значительный объем дискового пространства и могут замедлять работу сайта. В этой статье мы рассмотрим, как автоматизировать удаление таких нерабочих крупных изображений, чтобы поддерживать чистоту медиа-библиотеки и оптимизировать производительность.
Почему важно удалять неиспользуемые изображения
Медиа-файлы, особенно изображения, занимают много места на хостинге. При длительной работе сайта часть из них может стать неактуальной, например, когда вы удаляете записи или обновляете контент, но забываете удалить связанные с ними изображения. Это создает:
- Загромождение файловой системы.
- Проблемы с резервным копированием — бэкапы становятся тяжелее.
- Увеличение времени и ресурсов для обработки медиа, что негативно сказывается на скорости сайта.
Особенно критично это для крупных изображений (например, более 1 МБ), которые могут существенно нагружать сервер.
Как определить неиспользуемые крупные изображения в WordPress
Основная задача — найти изображения, которые не прикреплены к записям, страницам или не используются в контенте. Для этого можно использовать несколько подходов:
1. Сканирование медиа-библиотеки по размеру файлов
Проверяем все файлы в папке uploads и фильтруем по размеру. Это позволит сосредоточиться на крупных файлах.
2. Поиск по использованию в базе данных
Проверяем, есть ли ссылки на изображения в meta-полях, содержимом записей и других таблицах WordPress.
3. Использование плагинов
Существуют плагины, которые помогают находить и удалять неиспользуемые изображения. Пример — Clearfy Pro с функцией оптимизации и очистки медиа.
Реализация автоматического удаления через WPClass Cron
Автоматизировать процесс можно с помощью Cron-задачи, которая по расписанию будет проверять и удалять неиспользуемые крупные изображения. Ниже пример реализации.
Шаг 1. Функция для поиска неиспользуемых изображений
function wpclass_find_unused_large_images() {
global $wpdb;
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
$min_size = 1024 * 1024; // 1 МБ
// Получаем все вложения изображений
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
$unused = [];
foreach ($attachments as $attachment) {
$file_path = str_replace(wp_upload_dir()['baseurl'], $upload_path, $attachment->guid);
if (file_exists($file_path)) {
$file_size = filesize($file_path);
if ($file_size >= $min_size) {
// Проверяем, используется ли файл
$is_used = false;
// Проверка в постах
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment->guid) . '%'
));
if ($count > 0) {
$is_used = true;
}
// Можно добавить другие проверки (meta, widget, и т.д.)
if (!$is_used) {
$unused[] = $attachment->ID;
}
}
}
}
return $unused;
}Шаг 2. Функция удаления неиспользуемых изображений
function wpclass_delete_unused_large_images() {
$unused_images = wpclass_find_unused_large_images();
foreach ($unused_images as $attachment_id) {
wp_delete_attachment($attachment_id, true); // true — удаляет физический файл
}
}Шаг 3. Регистрация Cron-задачи
Добавляем событие, которое будет запускаться, например, раз в неделю.
function wpclass_schedule_cleanup() {
if (!wp_next_scheduled('wpclass_cleanup_unused_images')) {
wp_schedule_event(time(), 'weekly', 'wpclass_cleanup_unused_images');
}
}
add_action('wp', 'wpclass_schedule_cleanup');
add_action('wpclass_cleanup_unused_images', 'wpclass_delete_unused_large_images');Практические рекомендации и плагины для оптимизации изображений
Кроме удаления неиспользуемых файлов, рекомендуется:
- Использовать плагины оптимизации изображений, например, Clearfy Pro, для сжатия и оптимизации.
- Настроить WebP-формат и lazy loading для ускорения загрузки страниц.
- Периодически проверять медиа-библиотеку на наличие дубликатов и устаревших файлов.
Заключение: поддержка чистоты медиа в WordPress
Автоматическое удаление нерабочих крупных изображений — важный элемент технической поддержки сайта. Это помогает экономить место, ускорять работу сайта и облегчать его администрирование. Используйте предложенный код и рекомендации, чтобы внедрить эффективный процесс очистки медиа-библиотеки на вашем сайте WordPress.