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

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

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

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

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

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

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

Плагин Media Cleaner

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

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

Единственный минус — требует осторожности при работе с файлами, используемыми динамически через кастомный код.

Плагин WP-Optimize

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

  • Простая интеграция с остальными функциями оптимизации.
  • Автоматизация очистки по расписанию (в версии Pro).

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

Если вы хотите более гибко управлять процессом очистки и интегрировать его в свои рабочие процессы, можно написать собственный скрипт на PHP, который будет:

  • Поискать в базе данных все медиафайлы (attachment).
  • Проверить, используются ли эти файлы в контенте сайта.
  • Удалить те, которые не найдены в записях или метаданных.

Пример функции для поиска неиспользуемых медиафайлов

function wpfreecourses_find_unused_media() {
    global $wpdb;
    // Получаем все ID вложений
    $attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
    $unused = [];
    foreach ($attachments as $att_id) {
        $file = get_attached_file($att_id);
        if (!$file) continue;
        // Ищем в содержимом записей ссылки на этот файл
        $file_url = wp_get_attachment_url($att_id);
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));
        if ($count == 0) {
            $unused[] = $att_id;
        }
    }
    return $unused;
}

Эта функция возвращает массив ID вложений, которые не найдены ни в одном посте или странице.

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

function wpfreecourses_delete_unused_media() {
    $unused = wpfreecourses_find_unused_media();
    foreach ($unused as $att_id) {
        wp_delete_attachment($att_id, true); // true — удалять физический файл
    }
}

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

Как интегрировать очистку медиафайлов в автоматические задачи WordPress

Для периодического запуска очистки можно использовать WP-Cron. Пример регистрации задачи:

add_action('wpfreecourses_daily_cleanup', 'wpfreecourses_delete_unused_media');

if (!wp_next_scheduled('wpfreecourses_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpfreecourses_daily_cleanup');
}

Такой подход позволит автоматически очищать медиатеку раз в сутки без вашего участия.

Особенности и рекомендации по работе с неиспользуемыми медиафайлами

Перед тем как запускать автоматическую очистку, необходимо учесть несколько моментов:

  • Динамически подключаемые медиафайлы (например, через ACF, кастомные поля, плагины) могут не отображаться напрямую в post_content — их нужно проверять отдельно.
  • Создавайте резервные копии сайта и базы данных перед удалением.
  • Тестируйте скрипты на тестовом стенде, чтобы избежать потери важных данных.
  • Используйте профессиональные решения, если сайт сложный и содержит много кастомных связей.

Заключение

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

Как отключить XML-RPC в WordPress без поломки сайта
19.08.2026
WooCommerce: автоматическое удаление неактивных заказов по расписанию
26.06.2026
Как вывести остаток товара на странице корзины и оформления заказа в WooCommerce
12.08.2026
WooCommerce: как установить и настроить оповещения о статусе оплаты заказа
01.05.2026
Как убрать дубли страниц в WordPress без потери индексации
15.08.2026