Как автоматически удалять старые изображения в WordPress

В процессе эксплуатации сайта на WordPress с каждым днем в медиа-библиотеке накапливается множество изображений, многие из которых становятся неактуальными и занимают место на сервере. В этой статье подробно рассмотрим, как настроить автоматическое удаление старых изображений, чтобы оптимизировать пространство и повысить производительность сайта.

Почему важно удалять старые изображения в WordPress

Каждое изображение занимает дисковое пространство и влияет на скорость бэкапов, загрузку сайта и даже стоимость хостинга. Особенно остро эта проблема стоит для сайтов с большим объемом контента, например, новостных порталов или интернет-магазинов.

Удаление неиспользуемых и устаревших изображений позволяет:

  • Освободить место на сервере;
  • Уменьшить время резервного копирования;
  • Сократить время загрузки страниц;
  • Снизить расходы на хостинг при оплате за объем диска.

Однако вручную искать и удалять старые изображения неудобно и долго, поэтому автоматизация этого процесса — отличное решение.

Как определить, какие изображения можно удалять

Для автоматизации важно корректно определить критерии, по которым изображения будут считаться старыми и неиспользуемыми. Основные подходы:

  • Возраст изображения. Например, удалять изображения старше 1 года, если они не используются в публикациях.
  • Неиспользуемость. Изображения, которые не прикреплены к каким-либо материалам, галереям или не используются в контенте.
  • Комбинация критериев. Старое и неиспользуемое одновременно.

Обратите внимание, что просто удалять все старые изображения не всегда безопасно — некоторые из них могут быть использованы в виджетах, настройках тем или плагинов.

Использование плагинов для автоматического удаления старых изображений

Для решения задачи можно использовать готовые плагины. Вот несколько популярных вариантов:

1. Media Cleaner

Плагин анализирует медиа-библиотеку и определяет неиспользуемые картинки и файлы. Он предлагает безопасное удаление с возможностью восстановления.

Media Cleaner на WPSHOP.ru

2. WP-Optimize

Кроме оптимизации базы данных, WP-Optimize умеет удалять неиспользуемые изображения, тем самым экономя место.

WP-Optimize на WPSHOP.ru

3. Image Cleanup

Плагин позволяет фильтровать и удалять медиафайлы по дате и связям с контентом.

Однако для более гибкой настройки и интеграции лучше использовать кастомные решения.

Автоматизация удаления старых изображений с помощью кода

Рассмотрим пример кода, который поможет автоматически удалять изображения, которые не используются в записях и старше заданного срока.

Код можно добавить в файл functions.php вашей темы или создать отдельный мини-плагин.

function wpmy_delete_old_unused_images() {
    $days_old = 180; // Удалять изображения старше 180 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    global $wpdb;
    // Получаем 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
         AND ID NOT IN (SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id')
         AND post_parent = 0",
        $date_threshold
    ));

    foreach ($attachments as $attachment_id) {
        // Проверяем, используется ли изображение в содержимом других записей
        $file_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($file_url) . '%'
        ));

        if ($count == 0) {
            // Удаляем изображение навсегда
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Запускаем функцию по расписанию WP-Cron, например, раз в неделю
if (!wp_next_scheduled('wpmy_weekly_delete_old_images')) {
    wp_schedule_event(time(), 'weekly', 'wpmy_weekly_delete_old_images');
}
add_action('wpmy_weekly_delete_old_images', 'wpmy_delete_old_unused_images');

В этом коде мы:

  • Определяем срок давности в 180 дней;
  • Находим изображения без родительских записей и не являющиеся миниатюрами;
  • Проверяем, используются ли они в содержимом других записей;
  • Удаляем те, что не используются;
  • Автоматизируем запуск задачи через WP-Cron раз в неделю.

Дополнительные рекомендации по безопасности

Перед внедрением автоматического удаления важно:

  • Сделать резервную копию сайта и базы данных;
  • Тестировать код на тестовом сервере;
  • Добавить логирование удалений для контроля;
  • При необходимости предусмотреть возможность отмены удаления (например, перемещать в корзину WordPress, а не удалять сразу);
  • Учитывать использование изображений в плагинах и виджетах, которые могут не иметь прямых ссылок в постах.

Для логирования можно расширить функцию, например, записывая ID удаленных вложений в отдельный файл или таблицу базы данных.

Заключение

Автоматическое удаление старых изображений в WordPress — важный шаг к оптимизации сайта и экономии ресурсов. Выбор между плагинами и кастомными решениями зависит от ваших задач, опыта и требований к безопасности.

Если хотите более функциональный и гибкий инструмент, советую обратить внимание на Media Cleaner — он отлично подходит для профессиональной очистки медиа-библиотеки.

Также не забывайте регулярно проводить аудит медиафайлов и следить за их использованием, чтобы избежать случайного удаления важных изображений.

Оптимизация базы данных WordPress: практические советы и примеры кода
04.11.2025
WooCommerce: как автоматически удалять зависающие заказы в очереди обработки
14.05.2026
Оптимизация изображений WordPress: автоматическое изменение размера и сжатие
13.03.2026
Руководство по использованию REST API WordPress для разработчиков
20.11.2025
Как отключить комментарии на отдельных страницах WordPress
10.04.2026