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

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

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

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

Удаление медиа по дате и типу файла — задачи и сложности

Стандартный медиа-библиотека WordPress позволяет фильтровать файлы только по месяцу, но этого часто недостаточно. Иногда нужно удалить файлы, загруженные в определённый период, например, старше года, или только файлы определённых типов, например, только PNG или только PDF.

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

Пример решения: массовое удаление медиа через WP-CLI с фильтрацией

WP-CLI — мощный инструмент для управления WordPress из командной строки. Он позволяет быстро удалять медиафайлы с фильтрацией по дате и типу.

Например, чтобы удалить все медиафайлы старше 1 года, можно использовать такой скрипт bash:

YEAR_AGO=$(date --date='1 year ago' +%Y-%m-%d)
wp media list --field=ID --format=csv --date_query='before=$YEAR_AGO' | xargs -n1 wp media delete --yes

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

Чтобы добавить фильтрацию по типу файла (например, только изображения PNG), измените команду:

wp media list --field=ID --format=csv --date_query='before=$YEAR_AGO' --mime_type='image/png' | xargs -n1 wp media delete --yes

Реализация массового удаления медиа с помощью кастомного PHP-скрипта

Если доступ к WP-CLI ограничен, можно написать PHP-функцию, которую запустить через плагин или файл темы. Ниже пример функции wpbest_delete_media_by_date_and_type, которая удаляет медиафайлы по дате и MIME-типу:

function wpbest_delete_media_by_date_and_type($date_before, $mime_type = '') {
    $args = [
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'inherit',
        'date_query'     => [
            [
                'before' => $date_before,
                'inclusive' => true,
            ],
        ],
    ];

    if (!empty($mime_type)) {
        $args['post_mime_type'] = $mime_type;
    }

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return 'Медиафайлы не найдены для удаления.';
    }

    $deleted = 0;
    foreach ($query->posts as $attachment) {
        // Проверяем, используется ли файл в контенте
        $used = false;
        $posts_with_attachment = get_posts([
            's' => wp_get_attachment_url($attachment->ID),
            'post_type' => 'any',
            'post_status' => 'publish',
            'posts_per_page' => 1,
        ]);
        if (!empty($posts_with_attachment)) {
            $used = true;
        }

        if (!$used) {
            if (wp_delete_attachment($attachment->ID, true)) {
                $deleted++;
            }
        }
    }

    return "Удалено медиафайлов: {$deleted}";
}

// Пример вызова функции:
echo wpbest_delete_media_by_date_and_type('2023-01-01', 'image/jpeg');

В этом коде мы ищем все вложения (attachments) до указанной даты, опционально только определённого MIME-типа, проверяем, не используется ли файл в опубликованных постах, и удаляем его. Это помогает избежать случайного удаления нужных файлов.

Плагины для управления и удаления медиафайлов

Если вам удобнее использовать готовые инструменты, рассмотрите эти плагины:

  • Clearfy Pro — расширенные возможности оптимизации, включая управление медиа.
  • Media Cleaner — сканирует библиотеку на предмет неиспользуемых файлов и позволяет массово их удалять.
  • Force Regenerate Thumbnails — полезен для пересоздания миниатюр после очистки медиа.

Использование плагинов упрощает задачу, но всегда делайте резервную копию сайта перед массовым удалением.

Практические советы по безопасности и резервному копированию

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

Тестируйте скрипты сначала на копии сайта или в тестовой среде. Убедитесь, что фильтры корректно выбирают нужные файлы, и что важный контент не пострадает.

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

Выводы

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

Динамическое отображение изображений в WordPress: практическое руководство
05.02.2026
Как создать отслеживание событий в WordPress с помощью REST API
17.12.2025
Двойная авторизация в WordPress: реализация без плагинов
13.12.2025
Как удалить метаданные из медиа файлов WordPress для защиты конфиденциальности
22.02.2026
Как использовать шорткоды для динамического контента в WordPress
15.02.2026