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

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

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

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

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

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

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

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

  • Не вставлены ни в одну запись, страницу или пользовательский тип записи;
  • Не используются в качестве миниатюр (featured image);
  • Не задействованы в метаданных (например, в элементах конструктора страниц);
  • Не прикреплены к активным записям или страницам.

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

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

Среди популярных решений можно выделить следующие плагины:

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

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

Как автоматизировать удаление с помощью Cron и собственного кода

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

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

function wpbit_find_unused_media() {
    global $wpdb;
    // Получаем все вложения
    $attachments = get_posts(array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'inherit',
    ));

    $unused = array();

    foreach ($attachments as $attachment) {
        $id = $attachment->ID;
        $meta = get_post_meta($id);

        // Проверяем, используется ли в контенте
        $url = wp_get_attachment_url($id);
        $query = $wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
            '%' . $wpdb->esc_like($url) . '%'
        );

        $used = $wpdb->get_var($query);

        // Проверяем также использование как миниатюры
        $thumbnail_used = $wpdb->get_var($wpdb->prepare(
            "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_thumbnail_id' AND meta_value=%d LIMIT 1",
            $id
        ));

        if (!$used && !$thumbnail_used) {
            $unused[] = $id;
        }
    }

    return $unused;
}

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

Автоматическое удаление по расписанию

Для запуска задачи по Cron добавим следующий код:

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

add_action('wpbit_cleanup_unused_media_hook', 'wpbit_delete_unused_media');

function wpbit_delete_unused_media() {
    $unused = wpbit_find_unused_media();
    foreach ($unused as $attachment_id) {
        wp_delete_attachment($attachment_id, true);
    }
}

Этот код будет ежедневно удалять неиспользуемые медиафайлы. Важно убедиться, что функция wpbit_find_unused_media() корректно определяет неиспользуемые файлы, чтобы не удалить нужные.

Интеграция с плагином Clearfy Pro для улучшения безопасности и оптимизации

Для комплексной оптимизации сайта можно использовать Clearfy Pro. Этот плагин предлагает инструменты для оптимизации базы данных, управления медиа и повышения безопасности.

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

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

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

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

Выводы

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

Как избежать проблем с отключением WP-Cron в WordPress
20.04.2026
Как создать автоматический отчет по активности пользователей в WordPress
22.12.2025
Как создать собственный тип записи в WordPress
24.11.2025
Как добавить автоматическое сохранение в формы WordPress
04.01.2026
Как добавить автоматическое отображение отзывов в WordPress
16.04.2026