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

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

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

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

  • сэкономить место на хостинге;
  • ускорить создание резервных копий;
  • упростить управление медиабиблиотекой;
  • повысить безопасность — уменьшить площадь атаки;
  • оптимизировать производительность сайта.

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

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

Поиск в базе данных и контенте

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

Ручной поиск в базе данных — трудоёмкий и рискованный процесс, поэтому лучше использовать специальные инструменты.

Использование плагинов для удаления неиспользуемых медиа

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

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

Для установки любого из этих плагинов достаточно перейти в админке WordPress в раздел «Плагины» → «Добавить новый» и ввести название в поиск.

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

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

function wpall_delete_unused_media() {
    $args = array(
        'post_type' => 'attachment',
        'posts_per_page' => -1,
        'post_status' => 'inherit',
    );
    $attachments = get_posts($args);
    $deleted_count = 0;
    foreach ($attachments as $attachment) {
        $used = false;
        // Проверка использования в контенте постов
        $query = new WP_Query(array(
            'post_type' => 'any',
            'post_status' => 'any',
            's' => basename(wp_get_attachment_url($attachment->ID)),
            'fields' => 'ids',
            'posts_per_page' => 1
        ));
        if ($query->have_posts()) {
            $used = true;
        }
        wp_reset_postdata();
        if (!$used) {
            wp_delete_attachment($attachment->ID, true);
            $deleted_count++;
        }
    }
    return $deleted_count;
}

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

Важно: перед запуском подобных скриптов ОБЯЗАТЕЛЬНО сделайте резервную копию сайта и базы данных, чтобы избежать потери нужных данных.

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

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

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

function wpall_delete_old_media_files() {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-2 years'));
    $args = array(
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'date_query' => array(
            array(
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
    );
    $attachments = get_posts($args);
    $deleted_count = 0;
    foreach ($attachments as $attachment) {
        // Для безопасности можно добавить проверку использования, как в предыдущей функции
        wp_delete_attachment($attachment->ID, true);
        $deleted_count++;
    }
    return $deleted_count;
}

// Запланировать задачу
if (!wp_next_scheduled('wpall_cron_delete_old_media')) {
    wp_schedule_event(time(), 'daily', 'wpall_cron_delete_old_media');
}

add_action('wpall_cron_delete_old_media', 'wpall_delete_old_media_files');

Этот код удалит все вложения, загруженные более двух лет назад, ежедневно по расписанию WP-Cron.

Резюме и рекомендации

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

Не забывайте всегда создавать резервные копии перед массовыми удалениями и тестировать скрипты на тестовом сервере.

Как удалить заблокированных пользователей в WordPress
14.04.2026
Как создать автоответчик в комментариях WordPress
13.02.2026
Как правильно использовать хуки (actions и filters) в WordPress с примерами кода
08.03.2026
Автоматическое удаление IP из черного списка в WordPress по времени
27.12.2025
Авторизация по одноразовому паролю (OTP) в WordPress с практическими решениями
16.01.2026