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

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

Проблема неиспользуемых изображений в WordPress

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

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

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

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

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

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

 // Настройка Media Cleaner для глубокого сканирования
add_filter('media_cleaner_scan_mode', function() {
    return 'deep'; // глубокий режим сканирования
});

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

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

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

function wpsystem_find_unused_images() {
    global $wpdb;
    // Получаем все ID вложений (изображений)
    $attachments = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
    $unused = [];
    foreach ($attachments as $attachment_id) {
        $parent_id = get_post_field('post_parent', $attachment_id);
        if (empty($parent_id)) {
            // Проверяем, используется ли изображение в контенте
            $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($url) . '%'
            ));
            if ($count == 0) {
                $unused[] = $attachment_id;
            }
        }
    }
    return $unused;
}

function wpsystem_delete_unused_images() {
    $unused_images = wpsystem_find_unused_images();
    foreach ($unused_images as $id) {
        wp_delete_attachment($id, true); // Удаляем навсегда
    }
    return count($unused_images);
}

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

Расширение функционала: проверка пользовательских полей и метаданных

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

function wpsystem_is_image_used_elsewhere($url) {
    global $wpdb;
    // Поиск в мета-данных постов
    $count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value LIKE %s",
        '%' . $wpdb->esc_like($url) . '%'
    ));
    if ($count > 0) return true;
    // Можно добавить проверку опций, пользовательских таблиц и т.д.
    return false;
}

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

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

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

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

Заключение: почему важно регулярно чистить медиабиблиотеку

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

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

Используйте готовые плагины или создавайте собственные решения с учетом специфики вашего проекта. Регулярный аудит медиабиблиотеки — залог чистоты и эффективности WordPress-сайта.

WooCommerce: автоматическое обновление стоимости товара при изменении атрибутов
10.05.2026
WooCommerce: автоматическое обновление стоимости товара при изменении атрибутов
01.06.2026
Как изменить роли и права пользователей в WordPress через код
30.03.2026
Как создать собственный метабокс в WordPress
05.11.2025
Как создать простую систему отзывов в WordPress
20.11.2025