Автоматическое удаление старых изображений в WordPress

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

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

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

  • Росту занимаемого места на хостинге;
  • Замедлению процессов бэкапа и загрузки;
  • Увеличению времени сканирования и анализа базы данных;
  • Потере контроля над медиафайлами.

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

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

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

  • Возраст файла — например, изображения, которые не использовались в записях или страницах более 6–12 месяцев.
  • Отсутствие привязки к каким-либо постам или продуктам (неиспользуемые медиафайлы).

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

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

Среди популярных решений можно выделить плагины, которые помогают находить и удалять неиспользуемые или старые медиафайлы:

  • Media Cleaner — анализирует библиотеку медиа и находит файлы, которые не используются в записях, страницах, виджетах и даже в метаданных. Позволяет безопасно удалять их. Имеет бесплатную и PRO-версию.
  • WP-Optimize — кроме очистки базы данных, умеет удалять неиспользуемые изображения и другие медиафайлы.
  • Image Cleanup — более узконаправленный плагин, который помогает удалять медиафайлы старше заданного срока.

Пример использования Media Cleaner:

  • Установите и активируйте плагин.
  • Перейдите в раздел Media Cleaner в админке WordPress.
  • Запустите сканирование для поиска неиспользуемых файлов.
  • Просмотрите список и подтвердите удаление.

Автоматизация удаления с помощью WP-Cron и собственного кода

Если нужна более тонкая настройка и интеграция в специфические процессы сайта, можно реализовать автоматическое удаление старых изображений с помощью кода и планировщика WP-Cron.

Пример функции для удаления изображений, не использующихся в постах и старше 180 дней

function wprobot_delete_old_unused_images() {
    global $wpdb;
    $days_old = 180; // Возраст изображения в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days_old .' days'));

    // Получаем 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",
         $date_threshold
    ));

    foreach ($attachments as $attachment_id) {
        // Проверяем, используется ли изображение где-либо
        $is_used = false;

        // Поиск в контенте всех постов
        $search = $wpdb->get_var($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} 
             WHERE post_type IN ('post', 'page', 'custom_post_type') 
             AND post_status = 'publish' 
             AND post_content LIKE %s 
             LIMIT 1",
             '%' . $attachment_id . '%'
        ));

        if ($search) {
            $is_used = true;
        }

        // Если не используется, удаляем
        if (! $is_used) {
            wp_delete_attachment($attachment_id, true); // true — удалить физический файл
        }
    }
}

// Регистрируем задачу в WP-Cron
if (! wp_next_scheduled('wprobot_delete_images_cron')) {
    wp_schedule_event(time(), 'daily', 'wprobot_delete_images_cron');
}

add_action('wprobot_delete_images_cron', 'wprobot_delete_old_unused_images');

Этот код:

  • Каждый день запускает функцию удаления;
  • Ищет вложения-изображения старше 180 дней;
  • Проверяет, используются ли они в опубликованных постах и страницах;
  • Удаляет неиспользуемые изображения вместе с физическими файлами.

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

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

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

  • Добавьте дополнительные проверки в функцию, например, поиск по postmeta.
  • Используйте хуки и фильтры плагинов, если они предоставляют API для проверки использования файлов.
  • Пример расширения поиска по метаданным:
    $meta_search = $wpdb->get_var($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} 
         WHERE meta_value LIKE %s 
         LIMIT 1",
         '%' . $attachment_id . '%'
    ));
    if ($meta_search) {
        $is_used = true;
    }

Советы по безопасности и оптимизации

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

  • Сделайте полный бэкап файлов и базы данных;
  • Тестируйте функцию на тестовом сайте с копией данных;
  • Добавьте логирование удалённых файлов для возможности восстановления;
  • Регулярно проверяйте работу WP-Cron, чтобы задача выполнялась корректно.

Выводы

Автоматическое удаление старых изображений в WordPress помогает поддерживать сайт в чистоте, уменьшать нагрузку на сервер и упрощать администрирование. Выбор между плагинами и собственным кодом зависит от задач и специфики сайта. Если нужна гибкость и интеграция, лучше писать собственные решения с WP-Cron, если хочется быстро и без кода — подойдёт Media Cleaner или похожие плагины.

Для удобства вы можете изучить Media Cleaner от WPSHOP — это проверенный инструмент для очистки медиа-библиотеки.

Автоматическое отключение неиспользуемых виджетов в WordPress
05.06.2026
Автоматическое создание и отправка email-рассылок в WordPress с помощью WP Robot
05.01.2026
Как автоматизировать создание и управление вариантами выбора в WordPress
24.03.2026
Как автоматически обновлять контент в WordPress с помощью AJAX и WP-Cron
02.01.2026
Автоматическое возврат средств по устаревшим заказам в WooCommerce: настройка и проверка
13.06.2026