Как удалить пустующее изображение в WordPress

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

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

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

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

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

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

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

1. Media Cleaner

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

После установки и активации:

  1. Перейдите в Медиа > Media Cleaner.
  2. Запустите сканирование. Плагин просканирует все записи, страницы, пользовательские типы записей и метаданные.
  3. Просмотрите результаты и удалите ненужные изображения.

Media Cleaner имеет бесплатную и PRO-версию. Бесплатная подходит для большинства сайтов, но PRO поддерживает дополнительные плагины и конструкторы.

2. WP-Optimize

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

Его плюс — комплексный подход к оптимизации сайта.

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

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

function wplock_find_unattached_images() {
    $args = array(
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'post_status'    => 'inherit',
        'posts_per_page' => -1,
        'post_parent'    => 0 // Без родительской записи
    );

    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return [];
    }

    $unattached_images = [];
    while ($query->have_posts()) {
        $query->the_post();
        $unattached_images[] = [
            'ID' => get_the_ID(),
            'url' => wp_get_attachment_url(get_the_ID()),
            'title' => get_the_title()
        ];
    }
    wp_reset_postdata();

    return $unattached_images;
}

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

Расширенный поиск пустующих изображений с проверкой контента

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

function wplock_get_unused_images() {
    global $wpdb;

    $attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'", ARRAY_A);

    $unused = [];

    foreach ($attachments as $attachment) {
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($attachment['guid']) . '%'
        ));

        if ($count == 0) {
            $unused[] = $attachment;
        }
    }

    return $unused;
}

Эта функция перебирает все изображения и ищет их URL в содержимом постов. Если URL не найден, изображение считается пустующим.

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

Рекомендации и меры предосторожности при удалении изображений

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

Советы:

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

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

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

function wplock_delete_unused_images() {
    $unused_images = wplock_get_unused_images();
    foreach ($unused_images as $image) {
        wp_delete_attachment($image['ID'], true); // Полное удаление
    }
}

// Планируем задачу
if (!wp_next_scheduled('wplock_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wplock_daily_cleanup');
}

add_action('wplock_daily_cleanup', 'wplock_delete_unused_images');

Этот код запустит очистку один раз в день. Но будьте осторожны — перед автоматическим удалением лучше предварительно просматривать список.

Заключение

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

Как использовать REST API в WordPress для создания своего плагина
08.12.2025
Как защитить WordPress от bruteforce атак с помощью .htaccess
25.12.2025
Как избежать проблемы открытых директорий в WordPress: практические решения и примеры кода
14.01.2026
Как сделать отладку в WordPress с помощью Xdebug
25.11.2025
Как удалить пустые категории в WordPress
07.01.2026