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

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

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

Медиатека WordPress не следит автоматически за тем, какие файлы используются на страницах и в записях. Из-за этого со временем накапливаются «мертвые» файлы. Их удаление помогает:

  • Освободить пространство на сервере и ускорить работу хостинга.
  • Оптимизировать скорость бэкапов и обновлений сайта.
  • Снизить нагрузку при работе с медиатекой.
  • Поддерживать порядок и удобство управления медиа.

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

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

1. Media Cleaner

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

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

Скачать плагин можно на официальной странице.

2. WP-Optimize (модуль медиатеки)

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

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

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

Основная логика

1. Получаем список всех вложений (post_type = 'attachment').

2. Для каждого вложения проверяем, есть ли ссылки на него в контенте, метаданных и других местах.

3. Формируем список неиспользуемых файлов.

4. Удаляем их с помощью функции wp_delete_attachment().

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

function wpkey_find_and_delete_unused_media() {
    global $wpdb;

    // Получаем все ID вложений
    $attachments = get_posts([
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'inherit',
        'fields'         => 'ids',
    ]);

    foreach ($attachments as $attachment_id) {
        $file_url = wp_get_attachment_url($attachment_id);
        if (!$file_url) continue;

        // Проверяем, встречается ли URL файла в контенте или метаданных
        $like_url = '%' . $wpdb->esc_like($file_url) . '%';

        $used_in_posts = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            $like_url
        ));

        $used_in_meta = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
            $like_url
        ));

        if (intval($used_in_posts) === 0 && intval($used_in_meta) === 0) {
            // Медиафайл не используется, удаляем
            wp_delete_attachment($attachment_id, true);
            echo 'Deleted unused media ID: ' . $attachment_id . "\n";
        }
    }
}

Этот код можно запускать из консоли WP-CLI или добавить в отдельный плагин для периодического запуска с помощью WP Cron. Обратите внимание, что он не проверяет использование в виджетах, настройках плагинов или кастомных таблицах — эти случаи требуют дополнительной кастомизации.

Как интегрировать автоматическую очистку в WP Cron

Чтобы не запускать код вручную, можно настроить автоматический запуск скрипта с определённым интервалом. Вот как добавить задачу в WP Cron:

function wpkey_schedule_media_cleanup() {
    if (!wp_next_scheduled('wpkey_media_cleanup_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpkey_media_cleanup_hook');
    }
}
add_action('wp', 'wpkey_schedule_media_cleanup');

add_action('wpkey_media_cleanup_hook', 'wpkey_find_and_delete_unused_media');

Так будет запускаться функция очистки раз в неделю автоматически.

Рекомендации и меры предосторожности

Удаление медиафайлов — операция необратимая, поэтому важно:

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

Заключение

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

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

Как автоматизировать удаление спама в комментариях WordPress
08.01.2026
WooCommerce: автоматическое изменение статуса заказа при отсутствии оплаты
16.05.2026
WooCommerce не отображает способы оплаты при оформлении заказа: пошаговое решение
04.05.2026
Как удалить старые неиспользуемые опции в WordPress
15.04.2026
Как автоматически удалять неиспользуемые медиафайлы в WordPress
01.03.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс