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

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

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

Изображения занимают значительную часть дискового пространства на сервере. При частом обновлении контента, смене дизайна или удалении постов, файлы изображений часто остаются в медиатеке без использования. Это приводит к:

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

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

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

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

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

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

Далее рассмотрим практические методы удаления.

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

Можно создать пользовательский скрипт, который будет искать и удалять неиспользуемые изображения старше определённого времени. Пример кода для файла functions.php вашей темы или в виде отдельного плагина:

function wpcourse_delete_old_unused_images() {
    global $wpdb;
    $days = 90; // Количество дней, старше которых изображения считаются старыми
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} 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) {
        // Проверяем, используется ли изображение в контенте
        $meta = wp_get_attachment_metadata($attachment_id);
        $url = wp_get_attachment_url($attachment_id);

        if (!$url) continue;

        // Проверка ссылок на изображение в базе данных
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($url) . '%'
        ));

        if ($count == 0) {
            // Изображение не используется, удаляем
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Запускаем функцию раз в сутки через WP-Cron
if (!wp_next_scheduled('wpcourse_daily_delete_images')) {
    wp_schedule_event(time(), 'daily', 'wpcourse_daily_delete_images');
}
add_action('wpcourse_daily_delete_images', 'wpcourse_delete_old_unused_images');

Этот код создаёт ежедневное задание, которое удаляет изображения старше 90 дней, не используемые в контенте. Обязательно протестируйте на тестовом сайте, чтобы избежать удаления нужных файлов.

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

Если вы не хотите писать код, существуют плагины, которые помогают управлять медиатекой:

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

Важно: перед удалением файлов с помощью плагинов делайте резервные копии сайта.

Советы по безопасному удалению и управлению изображениями

Удаление изображений — операция, требующая осторожности. Вот несколько рекомендаций:

  • Всегда делайте резервную копию сайта перед массовым удалением;
  • Настраивайте фильтры удаления по дате и использованию;
  • Проверяйте логи и отчёты плагинов;
  • Используйте тестовую среду для проверки скриптов и плагинов;
  • Регулярно проводите аудит медиатеки.

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

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

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

function wpcourse_show_deleted_images_count() {
    $count = get_option('wpcourse_deleted_images_count', 0);
    return '<p>За последний запуск удалено изображений: ' . intval($count) . '</p>';
}
add_shortcode('deleted_images_count', 'wpcourse_show_deleted_images_count');

// В функции удаления в конце добавьте сохранение количества
// Например, в функции wpcourse_delete_old_unused_images считайте удалённые файлы и сохраняйте:
// update_option('wpcourse_deleted_images_count', $deleted_count);

Это поможет отслеживать эффективность очистки без захода в админку.

Заключение

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

Как отключить возможность изменения адреса доставки в WooCommerce после оформления заказа
01.05.2026
Как очистить кэш WooCommerce при изменении заказа без плагинов
09.05.2026
Как установить ограничение на регистрацию WordPress по email
18.03.2026
Как создать и использовать шорткоды в WordPress: подробное руководство
08.11.2025
Автоматическое удаление неоплаченных заказов в WooCommerce
24.05.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас