
🧹 Як масово видалити користувачів 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 покаже лише користувачів із цією роллю.

Крок 2, кількість на сторінку. За замовчуванням видно 20 записів. Для масової роботи цього замало. Кнопка «Налаштування екрана» (справа вгорі) відкриває панель, де в полі «Кількість елементів на сторінці» можна поставити 200, 500 або навіть 999. Натисніть «Застосувати», сторінка перезавантажиться й покаже весь список однією порцією.

Крок 3, масовий вибір. Чекбокс у шапці таблиці (поруч із заголовком «Ім’я користувача») виділяє всіх на сторінці разом. Після цього вручну зніміть галочки з тих, кого хочете залишити: адмінів, редакторів, ключових авторів.

Крок 4, видалення та переприв’язка контенту. У випадному списку «Дії» над таблицею виберіть «Видалити», натисніть «Застосувати». WordPress запитає, що робити з контентом користувачів, яких видаляють: варіант «Передати всі записи» + вибір адміністратора в сусідньому полі збереже пости; «Видалити весь контент» зітре все без можливості відновлення. Підтвердьте, і готово.

Вбудований метод надійний на малих і середніх обсягах. Але коли рахунок іде на тисячі, кожна сторінка генерує десятки SQL-запитів через PHP, і сервер або падає по max_execution_time, або встає колом. Для таких випадків, інструменти нижче.
Спосіб 2: плагін Bulk Delete
Bulk Delete, безкоштовний плагін з понад 300 000 активних встановлень. Його головна перевага перед стандартним методом, пакетна обробка. Плагін видаляє користувачів пакетами по 50-100 штук, не створюючи пікового навантаження на базу даних. І надає фільтри, яких немає в ядрі WordPress.
Встановлення стандартне: «Плагини» → «Додати новий» → пошук «Bulk Delete» → «Встановити» → «Активувати». Після активації в бічному меню з’являється розділ «Bulk WP», а в ньому, «Bulk Delete Users».
Тут ви обираєте роль для видалення та налаштовуєте один або кілька додаткових фільтрів:
- дата реєстрації: раніше або пізніше зазначеної дати;
- неактивність: користувачі, які не заходили на сайт останні N днів;
- відсутність постів: облікові записи без жодного запису;
- значення мета-поля: наприклад, видалити всіх, у кого
billing_country = 'RU'.

Перед запуском видалення обов’язково натисніть «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 всіх користувачів із потрібною роллю:
1 wp user list --role=subscriber --format=ids
Вивід, рядок з ID через пробіл: 12 45 78 134 256. Видаліть їх із переприв’язкою контенту на адміністратора (ID=1):
1 wp user delete 12 45 78 134 256 --reassign=1
Можна обійтися однією командою, без проміжного списку:
1 wp 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_, якщо він відрізняється:
1 SELECT u.ID, u.user_login, u.user_email 2 FROM wp_users u 3 JOIN wp_usermeta um ON u.ID = um.user_id 4 WHERE um.meta_key = 'wp_capabilities' 5 AND um.meta_value LIKE '%subscriber%';
Звірте видачу очима. Скопіюйте отримані ID.
Крок 2: переприв’язати контент. Замініть 1 на ID користувача, якому передаєте пости. Список 123, 456, 789, на ID з кроку 1:
1 UPDATE wp_posts 2 SET post_author = 1 3 WHERE post_author IN (123, 456, 789);
Крок 3: видалити користувачів і мета-дані. Саме в такому порядку:
1 DELETE FROM wp_users WHERE ID IN (123, 456, 789); 2 DELETE FROM wp_usermeta WHERE user_id IN (123, 456, 789);
Якщо потрібно видалити й дописи з коментарями, спочатку очищайте дочірні таблиці:
1 DELETE FROM wp_comments WHERE user_id IN (123, 456, 789); 2 DELETE 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 не пробачає випадкових видалень, а хостинг не зберігає копії нескінченно. Зробіть бекап зараз, і тільки потім відкривайте список користувачів.



