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

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

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

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

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

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

Как определить, какие медиафайлы можно удалить

Главная сложность – определить, какие медиафайлы не используются в контенте сайта. Для этого подойдут следующие методы:

  • Проверка использования через базу данных — поиск ссылок на медиафайлы в записях, страницах, виджетах и настройках.
  • Использование специализированных плагинов, которые анализируют медиа и показывают неиспользуемые файлы.
  • Ручной аудит каталога uploads с сопоставлением с медиа в библиотеке.

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

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

Самый простой способ – использовать готовые решения:

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

Для примера рассмотрим использование Media Cleaner:

  • Установите и активируйте плагин с wpshop.ru.
  • Запустите сканирование — плагин проанализирует все записи и покажет неиспользуемые файлы.
  • Проверьте результаты, чтобы исключить ложные срабатывания, и удалите файлы.

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

Автоматизация удаления с помощью WP Cron и пользовательского кода

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

  1. Периодически (например, раз в неделю) запускать скрипт через WP Cron.
  2. Искать медиафайлы, которые не связаны с записями и были загружены дольше определённого срока назад.
  3. Удалять такие файлы программно.

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

function wpdigest_delete_old_unused_media() {
    global $wpdb;

    // Время в секундах, например 30 дней
    $days = 30;
    $time_limit = time() - ($days * 24 * 60 * 60);

    // Получаем ID вложений, которые не связаны с записями
    $query = "
        SELECT ID FROM $wpdb->posts
        WHERE post_type = 'attachment'
          AND post_date_gmt < %s
          AND ID NOT IN (
            SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id'
          )
          AND ID NOT IN (
            SELECT ID FROM $wpdb->posts WHERE post_parent != 0
          )
    ";

    $attachments = $wpdb->get_col($wpdb->prepare($query, date('Y-m-d H:i:s', $time_limit)));

    foreach ($attachments as $attachment_id) {
        // Проверяем, что медиа не используется в контенте
        $meta = get_post_meta($attachment_id);
        $attachment = get_post($attachment_id);

        $content = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
            '%' . $attachment->guid . '%'
        ));

        if (!$content) {
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Регистрируем событие в WP Cron
if (!wp_next_scheduled('wpdigest_cron_delete_old_unused_media')) {
    wp_schedule_event(time(), 'weekly', 'wpdigest_cron_delete_old_unused_media');
}

add_action('wpdigest_cron_delete_old_unused_media', 'wpdigest_delete_old_unused_media');

Этот код:

  • Находит вложения (медиафайлы), которые старше 30 дней.
  • Проверяет, что они не связаны с записями и не используются в контенте.
  • Удаляет такие вложения полностью.
  • Запускается автоматически каждую неделю через WP Cron.

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

Советы по безопасности и резервному копированию перед удалением

При автоматическом удалении медиафайлов важно соблюдать меры предосторожности:

  • Всегда делайте резервную копию сайта и базы данных перед запуском автоматических скриптов.
  • Тестируйте код на локальном или тестовом сервере.
  • Добавьте логи и уведомления для контроля работы скрипта.
  • Используйте плагин Clearfy Pro (wpshop.ru), который помогает оптимизировать и чистить сайт, в том числе медиа.

Заключение

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

WooCommerce: как автоматически изменять цены товаров при сменах валюты
06.05.2026
WooCommerce: автоматическое изменение стоимости доставки по регионам клиента
03.07.2026
Как отключить типы постов в WordPress: проблемное место и решение
28.03.2026
Оптимизация загрузки изображений в WordPress: эффективные методы и практические решения
25.11.2025
Как удалить пустые категории в WordPress с помощью кода
18.12.2025