Автоматическое удаление старых медиафайлов в WordPress

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

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

Медиафайлы (изображения, видео, документы) занимают значительный объем на диске. Если не следить за их количеством, можно столкнуться с рядом проблем:

  • Переполненный диск и лимиты хостинга;
  • Замедление операций резервного копирования;
  • Трудности с навигацией в библиотеке медиа;
  • Потенциальные риски безопасности из-за устаревших файлов.

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

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

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

Классический подход — сверять медиабиблиотеку с содержимым постов, страниц, виджетов и других типов контента, а также проверять ссылки из CSS и JS. Для этого существуют специальные плагины и скрипты.

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

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

  • Media Cleaner — проверяет медиафайлы на предмет использования и предлагает удалить неиспользуемые. Бесплатная версия доступна на официальном репозитории.
  • WP-Optimize — комплексный плагин для оптимизации, в том числе умеет очищать библиотеку медиафайлов.
  • Remove Unused Media — простой инструмент для поиска и удаления неиспользуемых файлов.

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

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

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

function wpdeveloper_delete_old_unused_media() {
    $args = array(
        'post_type' => 'attachment',
        'posts_per_page' => -1,
        'post_status' => 'inherit',
        'date_query' => array(
            array(
                'before' => '90 days ago',
            ),
        ),
        'meta_query' => array(
            array(
                'key' => '_wp_attached_file',
                'compare' => 'EXISTS',
            ),
        ),
    );

    $attachments = get_posts($args);
    foreach ($attachments as $attachment) {
        $attached_post = get_post($attachment->post_parent);
        if (!$attached_post) {
            // Проверяем, не используется ли файл в контенте
            $file_url = wp_get_attachment_url($attachment->ID);
            global $wpdb;
            $count = $wpdb->get_var($wpdb->prepare(
                "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
                '%' . $wpdb->esc_like($file_url) . '%'
            ));
            if ($count == 0) {
                // Удаляем медиафайл
                wp_delete_attachment($attachment->ID, true);
            }
        }
    }
}

// Регистрация задачи в cron для выполнения ежедневно
if (!wp_next_scheduled('wpdeveloper_daily_media_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpdeveloper_daily_media_cleanup');
}
add_action('wpdeveloper_daily_media_cleanup', 'wpdeveloper_delete_old_unused_media');

Этот код:

  • Получает все вложения старше 90 дней;
  • Проверяет, есть ли у них родительская запись;
  • Если родителя нет, проверяет, используется ли URL файла в содержимом сайта;
  • Если файл не используется, удаляет его;
  • Автоматически запускает функцию ежедневно через WP-Cron.

Как обезопасить процесс удаления

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

Рекомендуемые меры безопасности:

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

Пример использования плагина Clearfy Pro для оптимизации медиа

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

Clearfy Pro интегрируется с WP-Cron, что позволяет настроить автоматическую очистку по расписанию без лишних усилий.

Заключение

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

Рекомендуется комбинировать оба подхода: для быстрой проверки и первичной очистки использовать плагины, а для регулярной автоматизации — собственные функции с WP-Cron.

Как создать автоматический импорт продуктов из Excel в WordPress
12.04.2026
Как создать уникальный фильтр для записей WordPress по нескольким параметрам
27.12.2025
Как создать собственный виджет WordPress с использованием классов
13.11.2025
Автоматическое удаление неактивных пользователей WordPress по последнему логину
14.03.2026
Как удалить обсуждения и комментарии на отдельных страницах WordPress
24.12.2025