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

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

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

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

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

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

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

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

1. Проверка через базу данных

Изображения хранятся в таблице wp_posts с типом записи attachment. Чтобы найти изображения, которые не связаны с другими элементами, можно выполнить SQL-запрос, который ищет файлы без привязанных записей:

SELECT ID, post_title FROM wp_posts WHERE post_type = 'attachment' AND ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key = '_thumbnail_id')

Однако такой запрос не учитывает изображения, вставленные напрямую в содержание через HTML тег <img>. Для полной проверки нужен более сложный анализ.

2. Поиск использования в содержимом записей

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

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

Теперь перейдем к реализации. Мы создадим функцию wpaction_delete_unused_images, которая будет проверять медиатеку и удалять неиспользуемые изображения.

Подход к реализации

1. Получаем список всех вложений (изображений).

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

3. Если не используются — удаляем с помощью функции wp_delete_attachment.

Пример кода функции

function wpaction_is_image_used($attachment_id) {
    // Проверяем, используется ли как миниатюра
    $args = [
        'post_type' => 'any',
        'meta_key' => '_thumbnail_id',
        'meta_value' => $attachment_id,
        'posts_per_page' => 1
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        wp_reset_postdata();
        return true;
    }
    wp_reset_postdata();

    // Проверяем, встречается ли URL изображения в содержимом
    $url = wp_get_attachment_url($attachment_id);
    if (!$url) return false;

    $args = [
        'post_type' => 'any',
        's' => $url,
        'posts_per_page' => 1
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        wp_reset_postdata();
        return true;
    }
    wp_reset_postdata();

    return false;
}

function wpaction_delete_unused_images() {
    $args = [
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => -1
    ];
    $attachments = get_posts($args);
    $deleted = 0;
    foreach ($attachments as $attachment) {
        if (!wpaction_is_image_used($attachment->ID)) {
            wp_delete_attachment($attachment->ID, true);
            $deleted++;
        }
    }
    return $deleted;
}

Эти функции можно запускать вручную или настроить их автоматический вызов по крону.

Настройка автоматического запуска с помощью WP-Cron

Чтобы не запускать очистку вручную, добавим задачу в планировщик WordPress. Для этого используем хук wp для регистрации события и функцию для его обработки.

function wpaction_schedule_image_cleanup() {
    if (!wp_next_scheduled('wpaction_image_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpaction_image_cleanup_hook');
    }
}
add_action('wp', 'wpaction_schedule_image_cleanup');

function wpaction_image_cleanup_callback() {
    $deleted = wpaction_delete_unused_images();
    if ($deleted) {
        error_log("[WPAction] Удалено неиспользуемых изображений: $deleted");
    }
}
add_action('wpaction_image_cleanup_hook', 'wpaction_image_cleanup_callback');

Этот код запустит очистку один раз в день и будет логировать результат в файл ошибок PHP.

Полезные плагины для управления медиафайлами

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

  • Media Cleaner — сканирует медиатеку и находит неиспользуемые файлы, имеет как бесплатную, так и платную версию.
  • WPGPT Media Manager (https://wpshop.ru/plugins/wpgpt?utm_source=wpaction.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskoe-udaleniye-neispolzuemyh-kartinok-v-wordpress) — расширенный менеджер медиафайлов с функцией очистки и автоматизации.
  • Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro?utm_source=wpaction.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskoe-udaleniye-neispolzuemyh-kartinok-v-wordpress) — плагин для оптимизации сайта, в том числе с возможностями управления медиа.

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

Рекомендации и предупреждения

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

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

Также учитывайте, что при большом количестве вложений выполнение функции может занимать значительное время, поэтому стоит запускать её в ночное время или с помощью WP-CLI.

Заключение

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

Для упрощения работы рекомендуем рассмотреть плагины из каталога WPSHOP, которые интегрируются с WordPress и позволяют автоматизировать многие рутинные задачи.

Как создать автоматические уведомления в WordPress с помощью WPRemark
17.02.2026
Как создать настройку автоудаления старых ревизий записей в WordPress
16.03.2026
Как добавить дополнительные мета-поля в административную панель WordPress
22.12.2025
Как настроить отложенный запуск задач в WordPress без плагинов
07.01.2026
Как создать собственный вид мета-блока в WordPress с примерами кода
13.03.2026