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

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

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

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

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

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

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

  • Проверка использования медиафайлов в базе данных: поиск упоминаний ID вложений в контенте.
  • Анализ таблицы wp_posts с типом post_type = 'attachment'.
  • Проверка метаданных и связей с другими объектами.

Этот процесс можно автоматизировать с помощью SQL-запросов или специальных функций PHP, которые затем помогут удалить неиспользуемые файлы.

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

Ниже приведён пример пользовательской функции wp24_find_unused_media(), которая находит ID вложений без использования в контенте и метаданных.

function wp24_find_unused_media() {
    global $wpdb;
    // Получаем все ID медиафайлов
    $attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
    $unused = [];

    foreach ($attachments as $attachment_id) {
        // Проверяем, используется ли attachment_id в постах
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%"' . $attachment_id . '"%'
        ));

        if ($count == 0) {
            // Проверяем, нет ли ссылок в метаданных
            $meta_count = $wpdb->get_var($wpdb->prepare(
                "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
                '%"' . $attachment_id . '"%'
            ));

            if ($meta_count == 0) {
                $unused[] = $attachment_id;
            }
        }
    }

    return $unused;
}

Эта функция вернёт массив ID вложений, которые не используются в содержимом и метаданных. Такой подход не гарантирует 100% точности, так как медиафайлы могут использоваться сторонними плагинами или нестандартно, но он подходит для базовой очистки.

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

Для удаления найденных файлов можно добавить функцию wp24_delete_unused_media(), которая удалит вложения по ID, используя встроенную функцию wp_delete_attachment(). Пример:

function wp24_delete_unused_media() {
    $unused_media = wp24_find_unused_media();

    foreach ($unused_media as $attachment_id) {
        // Удаляем вложение полностью, включая файлы
        wp_delete_attachment($attachment_id, true);
    }
}

Для автоматизации можно запускать эту функцию по расписанию через cron или WP-Cron.

Пример добавления WP-Cron для регулярной очистки

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

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wp24_weekly_media_cleanup')) {
    wp_schedule_event(time(), 'weekly', 'wp24_weekly_media_cleanup');
}

// Обработчик события
add_action('wp24_weekly_media_cleanup', 'wp24_delete_unused_media');

// При деактивации удаляем событие
function wp24_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wp24_weekly_media_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wp24_weekly_media_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wp24_deactivate_cleanup');

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

Плагины для автоматической очистки медиатеки

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

  • Media Cleaner – мощный инструмент для поиска и удаления неиспользуемых файлов. Поддерживает интеграцию с популярными плагинами и темами.
  • DNUI (Delete Not Used Image) – простой плагин для поиска и удаления неиспользуемых изображений.
  • WP-Optimize – комплексный плагин для оптимизации базы данных, включая очистку медиатеки.

Для загрузки Media Cleaner с официального сайта WPShop используйте ссылку: https://wpshop.ru/media-cleaner/

Рекомендации по безопасности и бэкапу

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

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

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

Итоги и советы по внедрению

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

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

Таким образом, вы сделаете свой WordPress-сайт более лёгким, быстрым и удобным для управления.

Как избежать ошибки memory limit в WordPress
06.04.2026
Удаление неиспользуемых метаданных в WooCommerce без плагинов: пошаговое руководство
03.05.2026
Как удалить загрузку шаблонов Gutenberg в WordPress для оптимизации сайта
25.03.2026
Как использовать хуки WordPress для максимальной гранулярности управления функционалом
02.01.2026
Как удалить заблокированные или проблемные медиафайлы в WordPress
31.05.2026