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

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

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

Каждое загруженное изображение занимает место на сервере и в базе данных. Даже если оно не отображается на страницах сайта, оно остаётся в медиабиблиотеке и резервных копиях. Удаление таких файлов помогает:

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

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

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

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

  1. Контенте записей и страниц;
  2. Виджетах и меню;
  3. Кастомных полях и метаданных;
  4. Шаблонах и слайдерах;
  5. Плагинах, которые могут хранить ссылки на изображения в своих таблицах.

Полный анализ вручную — трудоёмкая задача, поэтому мы рассмотрим подходы к её автоматизации.

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

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

1. Media Cleaner

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

Особенности:

  • Анализ контента и базы данных;
  • Игнорирование определённых папок и файлов;
  • Поддержка сторонних плагинов и конструкторов;
  • Резервное копирование перед удалением.

Скачать и узнать подробности можно на WPGshop.ru.

2. WP-Optimize

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

Преимущества:

  • Оптимизация базы данных;
  • Сжатие изображений;
  • Удаление временных файлов;
  • Простой интерфейс.

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

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

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

function wplessons_delete_old_unused_images() {
    global $wpdb;
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID вложений (изображений) старше $days дней
    $attachments = $wpdb->get_results($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 = $attachment->ID;

        // Проверяем, есть ли ссылки на изображение в контенте записей
        $meta = get_post_meta($id);
        $is_used = false;

        // Проверка в контенте
        $query = $wpdb->prepare(
            "SELECT ID FROM $wpdb->posts WHERE post_content LIKE %s LIMIT 1",
            '%"' . wp_get_attachment_url($id) . '"%'
        );
        $post_exists = $wpdb->get_var($query);

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

        // Проверяем метаданные
        if (!$is_used && !empty($meta)) {
            $is_used = true;
        }

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

// Добавляем в крон для регулярного запуска
if (!wp_next_scheduled('wplessons_cron_delete_old_images')) {
    wp_schedule_event(time(), 'daily', 'wplessons_cron_delete_old_images');
}
add_action('wplessons_cron_delete_old_images', 'wplessons_delete_old_unused_images');

Этот скрипт проверяет все изображения старше 30 дней, ищет ссылки на них в постах и метаданных, и если не находит — удаляет.

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

Рекомендации по безопасности и резервному копированию

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

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

Выводы и лучшие практики

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

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

Как удалить или изменить автора старой записи в WordPress без плагинов
18.02.2026
Как изменить размер и форму аватара в WordPress с примерами кода
26.01.2026
Автоматическое удаление старых неиспользуемых изображений из медиабиблиотеки WordPress
06.02.2026
Как использовать хук pre_get_posts в WordPress для фильтрации записей
29.01.2026
Как создать уникальный фильтр по пользовательским мета-полям в WordPress
18.02.2026