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

Диагностика проблемы со старыми изображениями в WordPress

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

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

Чтобы выявить такие изображения, можно использовать SQL-запрос или плагины, но лучше делать это программно, чтобы избежать ошибок.

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

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

  • Проверить, есть ли у медиафайла метаданные, указывающие на использование.
  • Проверить контент постов и продуктов на наличие ссылок на файл.

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

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

Шаг 1. Создаём WP-CLI команду для поиска неиспользуемых изображений

if ( defined('WP_CLI') && WP_CLI ) {
    WP_CLI::add_command('media clean-unused', function() {
        global $wpdb;
        $threshold = strtotime('-30 days');
        $query = $wpdb->prepare(
            "SELECT ID, post_date FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'",
            []
        );
        $attachments = $wpdb->get_results($query);
        $deleted = 0;

        foreach ($attachments as $attachment) {
            $usage_count = 0;

            // Проверяем наличие в контенте постов
            $file_url = wp_get_attachment_url($attachment->ID);
            $search_query = $wpdb->prepare(
                "SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
                '%' . $wpdb->esc_like($file_url) . '%'
            );
            $usage_count = $wpdb->get_var($search_query);

            // Если не используется и старше порога, удаляем
            if ($usage_count == 0 && strtotime($attachment->post_date) < $threshold) {
                wp_delete_attachment($attachment->ID, true);
                $deleted++;
            }
        }
        WP_CLI::success("Удалено неиспользуемых изображений: $deleted");
    });
}

Этот код регистрирует WP-CLI команду wp media clean-unused, которая удалит все изображения старше 30 дней, не использующиеся в контенте.

Шаг 2. Запуск команды и настройка автоматизации

Для запуска вручную используйте в терминале:

wp media clean-unused

Чтобы запускать автоматически, добавьте cron задание на сервере:

0 3 * * * /usr/bin/wp media clean-unused --path=/path/to/wordpress --allow-root >> /var/log/wp-media-clean.log 2>&1

Проверка результата после внедрения

  • Запустите команду вручную и проверьте вывод — должна быть статистика удалённых файлов.
  • Проверьте папку wp-content/uploads — число файлов должно уменьшиться.
  • В админке WordPress в медиа-библиотеке не должно быть старых неиспользуемых изображений.
  • Проверьте журнал ошибок сервера на предмет сбоев.

Частые ошибки и как их исправить

  • Удаление нужных изображений: если изображения используются в сторонних плагинах или как фон темы — скрипт их не найдёт. Добавьте исключения вручную или используйте плагины с поддержкой таких сценариев.
  • Проблемы с правами: команда может не удалить файлы, если у пользователя нет прав. Убедитесь, что WP-CLI запускается под правильным пользователем.
  • Высокая нагрузка: при большом количестве медиафайлов скрипт может долго работать — оптимизируйте выборки и добавьте лимиты.

Практические советы по безопасности и производительности

  • Всегда делайте резервные копии перед удалением файлов.
  • Используйте wp_delete_attachment с параметром $force_delete = true, чтобы удалять файлы физически, а не только из базы.
  • Для больших сайтов разбейте процесс на партии, чтобы избежать таймаутов.
  • Комбинируйте с плагинами очистки, например Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpsetup.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udalit-starye-izobrazheniya-v-wordpress) для комплексной оптимизации.

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

МетодПлюсыМинусыКогда использовать
WP-CLI скриптАвтоматизация, гибкость, полный контрольТребует навыков, доступ к серверуДля опытных разработчиков и больших сайтов
Плагины очистки (например Media Cleaner)Простота, визуальный интерфейсМогут удалить важные файлы, нагрузкаДля администраторов без навыков программирования
Ручная проверка и удалениеМаксимальная точностьОчень трудозатратноМаленькие сайты с ограниченным количеством медиа
Как добавить произвольные типы постов в WordPress с примерами кода
20.12.2025
WooCommerce: как использовать хуки для изменения структуры страницы товара
29.05.2026
Автоматическое удаление старых черновиков и постов в WordPress
09.03.2026
WooCommerce: как использовать WC REST API для автоматизации управления заказами
24.05.2026
WooCommerce: как автоматически удалять товары с нулевыми остатками и без продаж
12.05.2026