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

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

Почему стандартные методы удаления не всегда удобны

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

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

Как устроены медиафайлы в WordPress. Ключевые моменты

В WordPress медиафайлы — это записи с типом attachment, которые связаны с реальными файлами в папке wp-content/uploads.

Удаление медиафайла — это удаление записи в базе и физического файла на сервере (как основного, так и всех миниатюр).

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

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

Ниже пример функции, которая получает все вложения и удаляет их с помощью wp_delete_attachment(). Этот метод удаляет и записи, и файлы.

function wpboot_delete_all_media_attachments() {
    // Получаем все ID вложений
    $args = [
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'any',
        'fields'         => 'ids',
    ];
    $attachments = get_posts($args);

    if (empty($attachments)) {
        echo 'Медиафайлы не найдены.';
        return;
    }

    foreach ($attachments as $attachment_id) {
        // Удаляем вложение полностью
        $deleted = wp_delete_attachment($attachment_id, true);
        if ($deleted) {
            echo "Удалён медиафайл ID: $attachment_id<br>";
        } else {
            echo "Ошибка при удалении ID: $attachment_id<br>";
        }
    }
}

// Вызов функции
wpboot_delete_all_media_attachments();

Обратите внимание, что второй параметр wp_delete_attachmenttrue — означает удаление физического файла и всех его миниатюр.

Оптимизация удаления при большом количестве медиа

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

function wpboot_delete_media_batch($batch_size = 50, $offset = 0) {
    $args = [
        'post_type'      => 'attachment',
        'posts_per_page' => $batch_size,
        'offset'         => $offset,
        'post_status'    => 'any',
        'fields'         => 'ids',
    ];
    $attachments = get_posts($args);

    if (empty($attachments)) {
        return false; // Нет больше файлов
    }

    foreach ($attachments as $attachment_id) {
        wp_delete_attachment($attachment_id, true);
    }

    return true;
}

// Использование в цикле
$offset = 0;
$batch_size = 50;
while (wpboot_delete_media_batch($batch_size, $offset)) {
    $offset += $batch_size;
    // Здесь можно добавить паузу или логирование
}

Использование плагинов для массового удаления медиа

Если вам удобнее использовать готовые решения, рекомендую обратить внимание на плагин Media Cleaner. Он сканирует медиатеку и позволяет удалять неиспользуемые медиафайлы.

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

Резюме и рекомендации

  • Для массового удаления медиафайлов используйте wp_delete_attachment() с параметром true для полного удаления.
  • Удаляйте пакетами, чтобы избежать проблем с производительностью.
  • Перед удалением сделайте резервную копию сайта и базы данных.
  • Можно интегрировать код в кастомный плагин или использовать в WP-CLI для автоматизации.
  • Проверяйте, что медиафайлы не используются в контенте перед удалением, чтобы не сломать сайт.

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

Для дополнительного удобства рекомендую использовать Clearfy Pro, который помогает оптимизировать и очищать WordPress, включая работу с медиатекой.

Как использовать WPRemark для автоматического модератора комментариев в WordPress
14.02.2026
Замена AJAX на Fetch API в WordPress Gutenberg
05.04.2026
Как использовать хуки для автоматизации задач в WordPress
17.01.2026
Как сделать автоматический экспорт постов WordPress в Excel
30.03.2026
Динамический импорт в WordPress — улучшение производительности за счёт отложенной загрузки скриптов и стилей
25.12.2025