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

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

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

Удаление медиафайлов, которые не подключены к контенту сайта, позволяет:

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

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

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

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

Методы поиска

  • Поиск по базе данных: анализ содержимого таблиц wp_posts, wp_postmeta и других, где может встречаться URL или ID медиафайла.
  • Поиск по файловой системе: сравнение файлов в папке wp-content/uploads и записей в базе данных.

Простой способ — проверить, есть ли у медиафайла привязка к записям через поле post_parent. Но часто изображения используются в контенте через URL, а не как вложение, поэтому нужен более глубокий анализ.

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

Ниже пример функции wpbit_find_and_delete_unused_media(), которая ищет медиафайлы, не встречающиеся в записях, и удаляет их. Перед применением на боевом сайте обязательно сделайте бэкап.

function wpbit_find_and_delete_unused_media() {
    global $wpdb;

    // Получаем все вложения типа 'attachment' (медиафайлы)
    $attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");

    $deleted = 0;

    foreach ($attachments as $attachment) {
        $media_url = esc_sql($attachment->guid);

        // Ищем наличие URL медиа в контенте любых записей
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($media_url) . '%'
        ));

        // Проверяем также, есть ли у вложения родительская запись
        $parent_id = $wpdb->get_var($wpdb->prepare(
            "SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d",
            $attachment->ID
        ));

        if ($count == 0 && $parent_id == 0) {
            // Медиа не используется, можно удалить
            wp_delete_attachment($attachment->ID, true);
            $deleted++;
        }
    }

    return $deleted;
}

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

Автоматизация с помощью Cron и плагинов

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

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

add_action('wpbit_delete_unused_media_daily', 'wpbit_find_and_delete_unused_media');

Также можно использовать готовые плагины для поиска неиспользуемых медиа, например:

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

Особенности и рекомендации

При автоматическом удалении медиа важно учитывать:

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

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

Как создать динамический виджет в WordPress: практическое руководство
14.11.2025
Как установить автоматическое отображение отзывов в WordPress
03.04.2026
Как добавить автоматическое отображение отзывов в WordPress
16.04.2026
Как автоматически удалять старые записи в WordPress через Cron
18.01.2026
Автоматическое добавление атрибутов alt к изображениям WordPress
27.01.2026