Изображения занимают значительную часть места на сервере и часто становятся причиной замедления работы сайта на WordPress. Особенно это актуально для проектов, где регулярно добавляется много медиафайлов, а старые снимки уже не используются на страницах и постах. В этой статье мы подробно разберём, как автоматизировать процесс удаления неиспользуемых старых изображений, чтобы освободить место, повысить производительность и упростить управление медиафайлами.
Почему важно удалять неиспользуемые изображения в WordPress
С течением времени в медиатеке накапливаются файлы, которые не связаны ни с одной записью или страницей. Они занимают дисковое пространство и могут замедлять резервное копирование и работу сайта. Кроме того, избыточные изображения усложняют администрирование и поиск нужных файлов.
Удаление таких изображений вручную — трудоёмкий и рискованный процесс, особенно на больших сайтах. Автоматизация этой задачи позволит:
- Регулярно очищать медиатеку от «мусора»;
- Избежать ошибок при удалении нужных изображений;
- Оптимизировать расход дискового пространства;
- Повысить скорость работы сайта и резервного копирования.
Автоматизация удаления старых изображений: подходы и инструменты
Для автоматического удаления медиафайлов можно использовать готовые плагины, либо реализовать собственное решение с помощью кода. Рассмотрим оба варианта.
Плагины для удаления неиспользуемых изображений
Один из популярных и функциональных плагинов — Clearfy Pro. Он содержит модуль для поиска и удаления неиспользуемых изображений, а также позволяет настроить расписание автоматической очистки.
Другой вариант — Media Cleaner, который анализирует медиатеку и выявляет файлы, не прикреплённые к контенту.
Собственное решение на PHP для автоматического удаления старых изображений WordPress
Если вы предпочитаете кастомный подход, можно написать функцию, которая будет запускаться по cron и удалять изображения, которые не используются дольше определённого времени (например, 180 дней). Ниже пример такого решения.
function wpmanager_remove_old_unused_images() {
global $wpdb;
$days_threshold = 180; // количество дней, после которого изображение считается устаревшим
// Получаем дату для сравнения
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_threshold} days"));
// Запрос к базе для поиска вложений изображений, которые не используются
$query = $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
$date_threshold
);
$attachments = $wpdb->get_col($query);
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли изображение в каких-то постах
$usage = get_posts(array(
'post_type' => 'any',
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'value' => $attachment_id,
'compare' => '=',
),
),
'posts_per_page' => 1,
));
// Проверяем в контенте постов
$content_usage = $wpdb->get_var($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_content LIKE %s LIMIT 1",
'%'. $attachment_id .'%'
));
if (empty($usage) && empty($content_usage)) {
// Удаляем вложение
wp_delete_attachment($attachment_id, true);
}
}
}
// Хук для запуска функции по расписанию
add_action('wpmanager_cron_delete_old_images', 'wpmanager_remove_old_unused_images');
// Регистрация события при активации темы или плагина
function wpmanager_schedule_cron() {
if (!wp_next_scheduled('wpmanager_cron_delete_old_images')) {
wp_schedule_event(time(), 'daily', 'wpmanager_cron_delete_old_images');
}
}
add_action('wp', 'wpmanager_schedule_cron');
В этом коде мы выбираем все изображения, загруженные более 180 дней назад, и проверяем, используются ли они в качестве миниатюр или внутри содержимого. Если нет — удаляем их безвозвратно (второй параметр true в wp_delete_attachment).
Настройка и безопасность автоматического удаления
При автоматическом удалении файлов важно:
- Тщательно проверять, что изображение не используется;
- Резервировать данные перед запуском механизма;
- Установить логирование удалений для контроля;
- Настроить период запуска (например, раз в неделю или месяц).
Для логирования можно расширить функцию, записывая удалённые ID в отдельный файл или таблицу базы данных.
Интеграция с WPShop и другими плагинами
Если вы используете плагины от WPShop, например, Clearfy Pro, то они уже имеют удобные инструменты для очистки медиатеки и автоматизации подобных задач. Можно настроить автоматический запуск через интерфейс без написания кода.
Также полезно комбинировать очистку изображений с оптимизацией базы данных и сжатием медиафайлов для максимального ускорения сайта.
Выводы и рекомендации
Автоматическое удаление старых и неиспользуемых изображений — важный шаг к поддержанию производительности и удобства управления сайтом на WordPress. Используйте готовые плагины для быстрого старта или напишите собственные функции, чтобы полностью контролировать процесс. Не забывайте о безопасности и резервном копировании.
Регулярно проводите аудит медиатеки, чтобы сайт оставался лёгким и быстрым.