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

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

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

Избыточные медиафайлы — частая проблема на WordPress-сайтах:

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

Автоматизация удаления поможет поддерживать чистоту и порядок без ручных трудоёмких проверок.

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

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

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

Использование плагина Media Cleaner:

  1. Установите и активируйте плагин через админку WordPress.
  2. Перейдите в раздел Media Cleaner.
  3. Запустите сканирование — плагин проверит, какие файлы не используются в записях, страницах, виджетах, пользовательских полях.
  4. Просмотрите результаты и удалите ненужные файлы.

Важно: всегда делайте резервную копию сайта перед массовым удалением файлов.

Автоматизация с помощью собственного кода — пример решения для wpma.ru

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

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

    foreach ($attachments as $attachment) {
        $used = false;

        // Проверяем, прикреплено ли вложение к записи
        if ($attachment->post_parent) {
            $used = true;
        } else {
            // Ищем использование в контенте
            $query = new WP_Query(array(
                'post_type'   => 'any',
                'post_status' => 'any',
                's'           => 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);
        }
    }
}

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

Добавление функции в WordPress Cron

Чтобы автоматизировать вызов функции, добавим задачу в расписание:

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

add_action('wpma_cleanup_unused_media_hook', 'wpma_remove_unused_media');

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

Как избежать случайного удаления нужных файлов

Автоматизация — мощный инструмент, но важно минимизировать риски:

  • Всегда делайте резервные копии.
  • Добавьте логику исключений. Например, не удалять файлы, загруженные менее чем 30 дней назад, чтобы дать время их использовать.
  • Используйте временную папку для удаления. Сначала перемещайте файлы в карантин, а через несколько дней удаляйте окончательно.
  • Проверяйте использование файлов в различных местах: пользовательские поля, шорткоды, виджеты, мета-данные.

Пример добавления проверки возраста файла

function wpma_remove_unused_media() {
    $attachments = get_posts(array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'inherit',
    ));

    $threshold = strtotime('-30 days');

    foreach ($attachments as $attachment) {
        $used = false;
        $upload_date = strtotime($attachment->post_date);

        if ($upload_date > $threshold) {
            continue; // Файл слишком новый
        }

        if ($attachment->post_parent) {
            $used = true;
        } else {
            $query = new WP_Query(array(
                'post_type'   => 'any',
                'post_status' => 'any',
                's'           => 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);
        }
    }
}

Выводы и рекомендации

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

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

Как установить автоматический редирект после изменения слага в WordPress
20.12.2025
WooCommerce: как исключить определённые товары из поиска и категорий
24.06.2026
Как создать автоматический запрос на данные в WordPress с помощью WP_Query и AJAX
02.03.2026
Как автоматически удалять неиспользуемые термины таксономий в WordPress
08.04.2026
Как сделать автоматический редирект после удаления страницы в WordPress
22.01.2026