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

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

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

С течением времени медиа-библиотека WordPress может разрастаться до тысячи и более изображений, видео и других файлов. При этом часть из них может быть удалена из контента, но физически оставаться на сервере. Это приводит к:

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

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

Варианты решения: плагины для удаления неиспользуемых медиа файлов

1. Media Cleaner

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

Преимущества:

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

Установка:

Перейдите в админку WordPress → Плагины → Добавить новый, найдите "Media Cleaner" и установите.

Подробнее и скачать: Media Cleaner на WPSHOP

2. WP-Optimize

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

Это удобный вариант, если вы уже используете WP-Optimize для других задач.

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

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

Основная идея: получить все вложения (attachment), проверить, используется ли ссылка на них в записях, страницах, мета-полях и удалить, если нет.

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

function wpbloger_find_and_delete_unused_attachments() {
    global $wpdb;

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

    $deleted = 0;

    foreach ($attachments as $attachment_id) {
        $url = wp_get_attachment_url($attachment_id);

        // Ищем упоминание URL вложения в базе данных в постах
        $like_url = '%' . $wpdb->esc_like($url) . '%';
        
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
            $like_url
        ));

        // Проверяем наличие в мета-полях
        $meta_count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value LIKE %s",
            $like_url
        ));

        if (!$count && !$meta_count) {
            // Удаляем вложение без возможности восстановления
            wp_delete_attachment($attachment_id, true);
            $deleted++;
        }
    }

    return $deleted;
}

Эту функцию можно запускать вручную из админки или через WP-CLI, а также через Cron для автоматизации.

Как добавить кнопку запуска функции в админ-панели

Для удобства можно создать страницу в админке с кнопкой, которая запускает очистку:

function wpbloger_register_media_cleanup_page() {
    add_management_page(
        'Очистка медиа',
        'Очистка медиа',
        'manage_options',
        'wpbloger-media-cleanup',
        'wpbloger_media_cleanup_page_html'
    );
}
add_action('admin_menu', 'wpbloger_register_media_cleanup_page');

function wpbloger_media_cleanup_page_html() {
    if (!current_user_can('manage_options')) {
        return;
    }

    if (isset($_POST['wpbloger_cleanup'])) {
        $deleted = wpbloger_find_and_delete_unused_attachments();
        echo '<div class="updated notice">Удалено неиспользуемых файлов: ' . intval($deleted) . '</div>';
    }

    echo '<h1>Очистка неиспользуемых медиа файлов</h1>';
    echo '<form method="post">';
    echo '<p><input type="submit" name="wpbloger_cleanup" class="button button-primary" value="Запустить очистку" /></p>';
    echo '</form>';
}

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

Удаление файлов — операция необратимая, особенно при использовании wp_delete_attachment($id, true), которая удаляет файл без помещения в корзину.

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

Дополнительно: автоматизация очистки через Cron

Для регулярного удаления неиспользуемых файлов можно настроить WP-Cron:

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

add_action('wpbloger_daily_media_cleanup', 'wpbloger_find_and_delete_unused_attachments');

Этот код запустит функцию очистки каждый день. Можно менять периодичность на 'weekly' или 'hourly' при необходимости.

Заключение по теме

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

Как запретить отображение отзывов по ссылке в WordPress
16.02.2026
Оптимизация загрузки шрифтов в WordPress: практические решения и примеры кода
05.12.2025
Добавление поля телефона с подтверждением в форму регистрации WordPress
12.02.2026
Как создать автоматическое удаление старого контента в WordPress
23.12.2025
Как удалить неактивных пользователей WordPress
28.02.2026