В процессе активной работы с WordPress на сайте постепенно накапливаются медиафайлы, особенно изображения, которые могут уже не использоваться в контенте. Эти неиспользуемые изображения занимают место на сервере, замедляют резервное копирование и усложняют управление медиа библиотекой. В этой статье разберём, как создать систему автоматического удаления старых изображений в WordPress, чтобы поддерживать чистоту и оптимизацию сайта.
Почему важно удалять старые изображения в WordPress
Каждое изображение в WordPress сохраняется в нескольких размерах, что увеличивает объём занимаемого дискового пространства. Если вы не удаляете медиафайлы, которые перестали использоваться, размер вашей библиотеки растёт, что влияет на производительность сайта, скорость резервного копирования и даже стоимость хостинга.
Кроме того, неиспользуемые изображения могут стать причиной путаницы при работе с медиа-файлами и мешать SEO, если старые изображения индексируются поисковиками.
Автоматизация процесса удаления позволяет экономить время и поддерживать сайт в порядке без лишних усилий.
Как определить старые и неиспользуемые изображения
Для автоматического удаления нужно понимать, какие изображения считаются старыми и неиспользуемыми. Обычно под этим понимают файлы, которые:
- Не прикреплены к каким-либо записям или страницам (attachment post type без родительского поста).
- Не используются в контенте (например, не вставлены в записи, страницы, виджеты или меню).
- Были загружены давно (например, старше 6 месяцев или года).
Для определения таких файлов можно анализировать базу данных и содержимое постов, что требует аккуратного подхода.
Использование плагинов для поиска и удаления неиспользуемых изображений
Если не хотите писать код самостоятельно, можно использовать готовые плагины. Вот несколько полезных вариантов:
- Clearfy — плагин для оптимизации и очистки WordPress, включает функции для удаления неиспользуемых изображений.
- WPRemark — имеет инструменты для работы с медиа и автоматизации задач, включая очистку библиотеки.
- Media Cleaner — популярный бесплатный плагин, который сканирует библиотеку и выявляет неиспользуемые файлы.
Плагины удобны, но иногда требуют ручного контроля и не всегда подходят для автоматизации по расписанию.
Автоматизация удаления через код: пример решения
Если хотите создать собственное решение, можно написать функцию, которая будет автоматически удалять неиспользуемые изображения старше заданного срока. Для этого используем WP Cron — встроенный планировщик задач WordPress.
Шаг 1. Создаём функцию для поиска и удаления старых изображений
function wpupdate_delete_old_unused_images() {
$days = 180; // Удалять изображения старше 180 дней
$date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем все вложения типа image, которые старше даты
$args = [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'date_query' => [
[
'column' => 'post_date',
'before' => $date_limit,
],
],
'posts_per_page' => -1,
];
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
// Проверяем, прикреплен ли файл к посту
if (!$attachment->post_parent) {
// Проверяем, используется ли изображение в контенте
global $wpdb;
$image_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($image_url) . '%'
));
if (intval($count) === 0) {
// Удаляем вложение вместе с файлами
wp_delete_attachment($attachment->ID, true);
}
}
}
}
Эта функция получает все изображения старше 180 дней, которые не связаны с записями (post_parent = 0), и проверяет, не используются ли они в содержимом других постов. Если не используются — удаляет.
Шаг 2. Планируем выполнение функции по расписанию
function wpupdate_schedule_image_cleanup() {
if (!wp_next_scheduled('wpupdate_daily_image_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpupdate_daily_image_cleanup');
}
}
add_action('wp', 'wpupdate_schedule_image_cleanup');
add_action('wpupdate_daily_image_cleanup', 'wpupdate_delete_old_unused_images');
Этот код регистрирует ежедневное событие, которое будет запускать функцию очистки.
Как тестировать и использовать этот код
Перед внедрением на рабочем сайте обязательно делайте резервную копию базы и файлов. Лучше сначала протестировать функцию на тестовом сайте, чтобы убедиться, что удаляются только действительно неиспользуемые изображения.
Если хотите запускать функцию вручную, можно добавить временный вызов:
add_action('admin_init', 'wpupdate_delete_old_unused_images');
Но не забудьте удалить этот вызов после теста, чтобы не замедлять админку.
Советы и рекомендации для безопасного удаления изображений
Удаление медиафайлов — операция, требующая осторожности:
- Используйте фильтры и дополнительные проверки, если у вас сложная структура сайта с кастомным выводом медиа.
- Проверяйте, не используются ли изображения в плагинах, виджетах, настройках темы.
- Сделайте возможность восстановления удалённых файлов из резервных копий.
- Рассмотрите использование плагинов с поддержкой «корзины» для медиа, например, My Popup (с функциями бэкапа и предупреждений).
Заключение
Автоматическое удаление старых изображений — важный шаг в поддержке здоровой и оптимизированной базы данных WordPress. Используя пример кода выше, вы можете внедрить собственный механизм очистки, который будет работать в фоне и экономить место на сервере без риска случайного удаления нужных файлов. При необходимости воспользуйтесь проверенными плагинами для расширенного контроля и удобства.