В процессе эксплуатации сайта на WordPress в медиа-библиотеке часто накапливаются неиспользуемые или нерабочие изображения. Они занимают место на сервере, замедляют резервное копирование и могут вызывать проблемы с производительностью. В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление таких изображений, используя как готовые плагины, так и написав собственные функции с примерами кода.
Почему важно удалять неиспользуемые и нерабочие изображения
Нерабочие изображения — это файлы, которые фактически не отображаются на страницах сайта или не связаны с каким-либо контентом. Они могут появляться после удаления постов, смены дизайна, миграции сайта или при неаккуратном использовании плагинов. Вот основные причины, почему их нужно удалять:
- Освобождение дискового пространства: Медиафайлы занимают много места, особенно если это фотографии высокого качества.
- Оптимизация резервного копирования: Меньше данных — быстрее и дешевле создавать бэкапы.
- Ускорение работы сайта: Меньше файлов — быстрее работа системы и снижается нагрузка на сервер.
- Упрощение администрирования: Чистая медиатека — проще ориентироваться и управлять контентом.
Удалять изображения вручную — долго и рискованно. Поэтому автоматизация этого процесса — важная задача для каждого администратора WordPress.
Обзор плагинов для автоматического удаления неиспользуемых изображений
Плагин Media Cleaner
Media Cleaner — один из самых популярных плагинов для поиска и удаления неиспользуемых файлов. Он сканирует базу данных и файлы на сервере, выявляя объекты, не привязанные к постам или страницам.
- Имеет бесплатную и PRO версию.
- Поддерживает работу с плагинами WooCommerce, ACF и другими.
- Позволяет создавать резервные копии перед удалением.
Установка проста: просто установите и активируйте плагин через админку WordPress. После запуска сканирования можно просмотреть список неиспользуемых изображений и выбрать, что удалить.
Плагин WP-Optimize
Хотя WP-Optimize в первую очередь известен как инструмент для оптимизации базы данных и кэширования, в его функционал входит и удаление неиспользуемых медиафайлов. Это удобно, если вы хотите использовать один плагин для комплексной оптимизации сайта.
Реализация автоматического удаления нерабочих изображений с помощью кода
Если вы хотите более контролируемое решение и минимизировать использование сторонних плагинов, можно написать собственный скрипт для поиска и удаления неиспользуемых изображений. Рассмотрим пример функции wpupdate_delete_unused_images(), которая выполняет такую задачу.
Логика функции
- Получить список всех изображений из медиатеки.
- Проверить каждое изображение на использование в постах, страницах, виджетах и настройках.
- Удалить файлы, которые не используются.
Пример кода
function wpupdate_delete_unused_images() {
// Получаем все вложения типа 'image'
$args = [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1,
'post_status' => 'inherit',
];
$images = get_posts($args);
$unused_images = [];
foreach ($images as $image) {
$image_id = $image->ID;
$image_url = wp_get_attachment_url($image_id);
// Проверяем использование через WP_Query
$args_check = [
'post_type' => 'any',
'post_status' => 'publish',
'meta_query' => [
[
'key' => '_thumbnail_id',
'value' => $image_id,
'compare' => '=',
],
],
'fields' => 'ids',
'posts_per_page' => 1,
];
$query = new WP_Query($args_check);
// Если изображение не используется как миниатюра
if (!$query->have_posts()) {
// Проверяем содержание постов на наличие URL изображения
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($image_url) . '%'
));
if (intval($count) === 0) {
$unused_images[] = $image_id;
}
}
}
// Удаляем неиспользуемые изображения
foreach ($unused_images as $unused_id) {
wp_delete_attachment($unused_id, true); // true — удалить физический файл
}
return count($unused_images);
}
Эту функцию можно запускать вручную, например, через WP-CLI, или автоматизировать с помощью cron-задачи. Ниже пример добавления ежедневного cron-задания:
if (!wp_next_scheduled('wpupdate_daily_image_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpupdate_daily_image_cleanup');
}
add_action('wpupdate_daily_image_cleanup', 'wpupdate_delete_unused_images');
Особенности и риски автоматического удаления изображений
Перед внедрением автоматического удаления важно понимать ряд нюансов:
- Точность определения использования: Некоторые изображения могут использоваться в нестандартных местах (например, в настройках темы, виджетах, кастомных полях), и их трудно выявить простым поиском.
- Резервное копирование: Всегда делайте бэкап перед массовым удалением, чтобы избежать потери важных данных.
- Проверка перед удалением: Рекомендуется сначала просматривать список на удаление вручную или запускать функцию в режиме только подсчёта.
- Совместимость с плагинами: Некоторые плагины могут хранить ссылки на изображения в нестандартных местах, что требует дополнительной проверки.
Чтобы минимизировать риски, можно добавить логирование удалённых файлов и опцию «корзины», куда переносить изображения перед окончательным удалением.
Дополнительные рекомендации и полезные плагины
Для комплексного управления медиафайлами советуем обратить внимание на следующие инструменты:
- Clearfy Pro — плагин для оптимизации сайта, включает инструменты для управления медиа.
- WPRemark — помогает оптимизировать комментарии и медиа.
- Использование CDN с автоматической оптимизацией изображений, например, Cloudflare или Jetpack, для уменьшения нагрузки на сервер.
Автоматизация удаления неиспользуемых изображений — важный шаг к поддержанию здоровья сайта и улучшению его производительности. Технически грамотный подход и тестирование позволят избежать ошибок и сохранить ценный контент.