Skip to content

Всё для WordPress, веб-разработки — и не только

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

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

Тысяча двести спам-регистраций после рекламной кампании. Триста тестовых аккаунтов, которые забыли удалить после запуска. Сотня Contributor'ов, уволившихся полгода назад. Всё это лежит в базе сайта мёртвым грузом, и растёт с каждым месяцем.

Удалять такой балласт по одному, занятие для робота, а не человека. Штатная таблица WordPress показывает 20 пользователей на страницу. При тысяче аккаунтов это 50 кликов «Удалить» и 50 подтверждений. На втором десятке хочется закрыть браузер и притвориться, что проблемы нет.

Но проблему можно решить за пять минут. WordPress даёт четыре инструмента для массовой зачистки пользователей по роли, от встроенного фильтра, который не требует ни одного плагина, до прямого SQL в phpMyAdmin. Разберём каждый с инструкцией, скриншотами и главным: что делать, чтобы не отстрелить себе доступ к сайту.

💡 Быстрый обзор:

  • Сделайте полный бэкап базы и файлов, это не совет, а страховка от катастрофы
  • Отфильтруйте пользователей по роли через встроенные массовые действия, хватит для сотни-другой аккаунтов
  • Установите Bulk Delete если нужны тонкие фильтры: по дате регистрации, неактивности, отсутствию постов
  • Через WP-CLI задача решается одной командой, любой объём, включая десятки тысяч
  • Прямой SQL даёт абсолютный контроль, но требует аккуратности: одна опечатка в WHERE может стоить админ-доступа

Что сделать до удаления

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

Полный бэкап. Резервная копия базы данных и файлов, единственный способ откатить массовое удаление. Подойдёт UpdraftPlus (отправляет бэкап в Google Drive, Dropbox или на ваш S3) либо WPvivid. На хостингах с cPanel используйте встроенный Backup Wizard, он быстрее и не нагружает PHP-воркеры.

Экспорт списка пользователей. Если данные удаляемых аккаунтов могут понадобиться для аудита или отчётности, сначала выгрузите их. Путь: «Пользователи» → «Все пользователи» → кнопка «Экспорт» вверху → формат CSV. Файл сохраните локально. Восстановить аккаунт после DELETE из базы нельзя, только из бэкапа.

Ревизия контента. Отфильтруйте пользователей по роли и гляньте столбец «Записи», сколько постов и страниц останется без автора. Решите заранее: передадите контент администратору при удалении или сотрёте вместе с аккаунтами. Комментарии удалённых пользователей остаются на сайте (автор показывается как «Deleted User»), их это не касается.

Способ 1: встроенные массовые действия

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

Шаг 1, фильтр по роли. Зайдите в «Пользователи» → «Все пользователи». Над таблицей, выпадающий список ролей. Выберите нужную (например, «Подписчик»), нажмите «Фильтр». WordPress покажет только пользователей с этой ролью.

Фильтрация пользователей WordPress по роли в админке

Шаг 2, количество на страницу. По умолчанию видно 20 записей. Для массовой работы этого мало. Кнопка «Настройки экрана» (справа вверху) открывает панель, где в поле «Количество элементов на странице» можно поставить 200, 500 или даже 999. Нажмите «Применить», страница перезагрузится и покажет весь список одной порцией.

Настройка количества элементов на странице в админке WordPress

Шаг 3, массовый выбор. Чекбокс в шапке таблицы (рядом с заголовком «Имя пользователя») выделяет всех на странице разом. После этого вручную снимите галочки с тех, кого хотите оставить, админов, редакторов, ключевых авторов.

Массовый выбор всех пользователей на странице для удаления

Шаг 4, удаление и перепривязка контента. В выпадающем списке «Действия» над таблицей выберите «Удалить», нажмите «Применить». WordPress спросит, что делать с контентом удаляемых пользователей: вариант «Передать все записи» + выбор администратора в соседнем поле сохранит посты; «Удалить весь контент» сотрёт всё без возможности восстановления. Подтвердите, и готово.

Диалог передачи контента при массовом удалении пользователей

Встроенный метод надёжен на малых и средних объёмах. Но когда счёт идёт на тысячи, каждая страница генерирует десятки SQL-запросов через PHP, и сервер либо падает по max_execution_time, либо встаёт колом. Для таких случаев, инструменты ниже.

Способ 2: плагин Bulk Delete

Bulk Delete, бесплатный плагин с 300 000+ активных установок. Его главное преимущество перед штатным методом: batch-обработка. Плагин удаляет пользователей пакетами по 50-100 штук, не создавая пиковой нагрузки на базу. И даёт фильтры, которых в ядре WordPress нет.

Установка стандартная: «Плагины» → «Добавить новый» → поиск «Bulk Delete» → «Установить» → «Активировать». После активации в боковом меню появляется раздел «Bulk WP», внутри, «Bulk Delete Users».

Здесь вы выбираете роль для удаления и настраиваете один или несколько дополнительных фильтров:

  • дата регистрации: раньше или позже указанного числа;
  • неактивность: пользователи, не заходившие на сайт последние N дней;
  • отсутствие постов: аккаунты без единой записи;
  • значение мета-поля: например, удалить всех у кого billing_country = 'RU'.
Страница массового удаления пользователей плагина Bulk Delete

Перед запуском удаления обязательно нажмите «Preview Users», плагин покажет список ID и email'ов, попавших под фильтры. Сверьте, что удаляете именно тех, кого нужно. Затем отметьте чекбокс подтверждения и жмите «Bulk Delete».

Из заметных альтернатив: WP Bulk Delete умеет удалять не только пользователей, но и посты, страницы, комментарии, таксономии, универсальный чистильщик, но часть функций в Pro. User Role Editor в первую очередь инструмент для правки ролей и создания кастомных, однако в его интерфейсе тоже есть массовое удаление по роли (вкладка «Users»).

Способ 3: WP-CLI

WP-CLI решает задачу одной консольной командой. Никакой пагинации, никаких таймаутов. Нужен shell-доступ к серверу, SSH на VPS, выделенном хостинге или локальном dev-окружении. На дешёвом shared-хостинге WP-CLI обычно недоступен.

Сначала получите ID всех пользователей с нужной ролью:

1wp user list --role=subscriber --format=ids

Вывод, строка из ID через пробел: 12 45 78 134 256. Удалите их с перепривязкой контента на администратора (ID=1):

1wp user delete 12 45 78 134 256 --reassign=1

Можно обойтись одной командой, без промежуточного списка:

1wp user delete $(wp user list --role=subscriber --format=ids) --reassign=1

Флаг --delete-posts вместо --reassign полностью стирает и пользователей, и их контент. Используйте только если содержимое удаляемых аккаунтов точно не нужно.

WP-CLI работает напрямую с базой данных, в обход PHP. Для ста тысяч пользователей команда отрабатывает за 2-5 секунд. Это на порядки быстрее любого плагина, и безопаснее ручного SQL, потому что wp user delete каскадно чистит мета-данные, не оставляя сиротских строк.

Способ 4: прямой SQL

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

Сначала бэкап базы. Это не рекомендация, а жёсткое требование. Одна опечатка в WHERE, например, administrator вместо subscriber, и вы теряете доступ к сайту. Восстановить можно только из дампа.

Зайдите в phpMyAdmin через панель хостинга, выберите базу WordPress, откройте вкладку «SQL».

Шаг 1: найти ID. Роли хранятся в таблице wp_usermeta, поле meta_key = 'wp_capabilities'. Замените subscriber на нужную роль и скорректируйте префикс wp_ если он отличается:

1SELECT u.ID, u.user_login, u.user_email
2FROM wp_users u
3JOIN wp_usermeta um ON u.ID = um.user_id
4WHERE um.meta_key = 'wp_capabilities'
5AND um.meta_value LIKE '%subscriber%';

Сверьте выдачу глазами. Скопируйте полученные ID.

Шаг 2: перепривязать контент. Замените 1 на ID пользователя, которому передаёте посты. Список 123, 456, 789, на ID из шага 1:

1UPDATE wp_posts
2SET post_author = 1
3WHERE post_author IN (123, 456, 789);

Шаг 3: удалить пользователей и мета-данные. Именно в этом порядке:

1DELETE FROM wp_users WHERE ID IN (123, 456, 789);
2DELETE FROM wp_usermeta WHERE user_id IN (123, 456, 789);

Если нужно удалить и посты с комментариями, сначала чистите дочерние таблицы:

1DELETE FROM wp_comments WHERE user_id IN (123, 456, 789);
2DELETE FROM wp_posts WHERE post_author IN (123, 456, 789);

И только потом, wp_users и wp_usermeta. Порядок критичен: сначала дочерние записи, затем родительские, иначе получите нарушения внешних ключей.

После SQL обязательно проверьте, что удалённые пользователи действительно исчезли из админки, а посты (если перепривязывали) видны под новым автором.

⁉️🤔 Частые вопросы

Можно ли восстановить удалённого пользователя?

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

Что станет с контентом удалённого пользователя?

Зависит от выбора при удалении. Опция «Передать все записи» + администратор, посты и страницы сохраняются, просто меняют автора. Опция «Удалить весь контент», посты, страницы и медиафайлы стираются без возможности восстановления. Комментарии удалённых пользователей остаются на сайте, автор отображается как «Deleted User», их удаление это отдельная операция.

Какой способ самый быстрый для 10 000+ пользователей?

WP-CLI. Одна команда wp user delete $(wp user list --role=subscriber --format=ids) --reassign=1 отрабатывает за 2-5 секунд даже на сотне тысяч аккаунтов. SQL через phpMyAdmin тоже быстрый, но требует копирования ID между запросами вручную. Плагины и встроенный метод для таких объёмов бесполезны: они гоняют данные через PHP и упираются в ограничения max_execution_time.

Нужно ли удалять wp_usermeta вместе с пользователями?

Да. Если удалить только wp_users, в wp_usermeta останутся сиротские строки с мета-данными несуществующих аккаунтов. Сайт они не ломают, но раздувают базу. Плагин Bulk Delete и WP-CLI (wp user delete) чистят мета-данные автоматически. При ручном SQL, обязательно добавьте второй запрос DELETE FROM wp_usermeta.

Можно ли удалить только пользователей без постов?

Можно. Плагин Bulk Delete даёт готовый фильтр «Users without posts». В WP-CLI сцепите две команды: сначала получите ID пользователей роли, затем для каждого проверьте наличие постов через wp post list. В SQL, добавьте условие AND u.ID NOT IN (SELECT DISTINCT post_author FROM wp_posts).

Теперь о безопасности на практике. Самый опасный сценарий, удаление через SQL без предпросмотра. Даже опытные админы ошибаются в WHERE. Бэкап перед SQL, это правило, которое срабатывает один раз из ста. Но именно в этот раз оно спасает сайт.

Что выбрать под вашу задачу

Четыре способа закрывают любой сценарий, от пары десятков спам-регистраций до ста тысяч мёртвых аккаунтов. Вот короткая матрица:

  • Меньше 200 пользователей, не хочется ставить плагины → встроенные массовые действия. Три клика, и проблема решена.
  • До 5 000, нужны фильтры по дате или неактивности → плагин Bulk Delete. Безопаснее всего для тех, кто не работает с консолью.
  • Любой объём, есть SSH-доступ → WP-CLI. Одна команда, 2-5 секунд, результат.
  • Свой сервер, нужен контроль над каждым DELETE → прямой SQL. Но только если вы точно знаете, что делаете, и сделали бэкап.

Главное правило не зависит от способа: бэкап, бэкап и ещё раз бэкап. База данных WordPress не прощает случайных удалений, а хостинг не хранит копии бесконечно. Сделайте бэкап сейчас, и только потом открывайте список пользователей.