Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🧹 Jak masowo usunąć użytkowników WordPress z określoną rolą

🧹 Jak masowo usunąć użytkowników WordPress z określoną rolą

Tysiąc dwieście spamowych rejestracji po kampanii reklamowej. Trzysta kont testowych, o których zapomniano usunąć po uruchomieniu. Setka Contributorów, którzy odeszli pół roku temu. Wszystko to zalega w bazie witryny jako martwy balast i przyrasta co miesiąc.

Usuwanie takiego balastu pojedynczo to zajęcie dla robota, nie dla człowieka. Standardowa tabela WordPress pokazuje 20 użytkowników na stronę. Przy tysiącu kont oznacza to 50 kliknięć „Usuń" i 50 potwierdzeń. Przy drugiej dziesiątce ma się ochotę zamknąć przeglądarkę i udawać, że problem nie istnieje.

Ale problem można rozwiązać w pięć minut. WordPress daje cztery narzędzia do masowego czyszczenia użytkowników według roli: od wbudowanego filtra, który nie wymaga żadnej wtyczki, po bezpośrednie zapytanie SQL w phpMyAdmin. Omówimy każde z nich z instrukcją, zrzutami ekranu i tym, co najważniejsze: co zrobić, żeby nie odstrzelić sobie dostępu do witryny.

💡 Szybki przegląd:

  • Wykonaj pełną kopię zapasową bazy i plików, to nie rada, a zabezpieczenie przed katastrofą
  • Przefiltruj użytkowników według roli za pomocą wbudowanych akcji masowych, wystarczy na sto, dwieście kont
  • Zainstaluj Bulk Delete, jeśli potrzebujesz precyzyjnych filtrów: według daty rejestracji, nieaktywności, braku postów
  • Przez WP-CLI zadanie rozwiązuje się jedną komendą, dowolna liczba, w tym dziesiątki tysięcy
  • Bezpośrednie zapytanie SQL daje absolutną kontrolę, ale wymaga ostrożności: jeden błąd w WHERE może kosztować dostęp administracyjny

Co zrobić przed usunięciem

Trzy czynności, które ratują przed nieodwracalnymi skutkami. Proszę pominąć którąkolwiek, a ryzykuje Pan nie tylko treścią, ale i sprawnością witryny.

Pełna kopia zapasowa. Kopia zapasowa bazy danych i plików to jedyny sposób, by cofnąć masowe usunięcie. Sprawdzi się UpdraftPlus (wysyła kopię na Google Drive, Dropbox lub na Pana S3) albo WPvivid. Na hostingach z cPanel proszę użyć wbudowanego Kreatora kopii zapasowych, jest szybszy i nie obciąża procesów PHP.

Eksport listy użytkowników. Jeśli dane usuwanych kont mogą być potrzebne do audytu lub raportowania, proszę je najpierw wyeksportować. Ścieżka: „Użytkownicy" → „Wszyscy użytkownicy" → przycisk „Eksport" na górze → format CSV. Plik proszę zapisać lokalnie. Przywrócenie konta po DELETE z bazy nie jest możliwe, tylko z kopii zapasowej.

Przegląd treści. Proszę przefiltrować użytkowników według roli i spojrzeć na kolumnę „Wpisy", ile postów i stron pozostanie bez autora. Proszę zdecydować z góry: przekaże Pan treść administratorowi podczas usuwania czy usunie ją razem z kontami. Komentarze usuniętych użytkowników pozostają na stronie (autor widnieje jako „Deleted User"), ich to nie dotyczy.

Sposób 1: wbudowane akcje masowe

Bez żadnej wtyczki. Wszystko, co potrzebne, jest już w rdzeniu WordPressa. Nadaje się do liczby do kilkuset kont za jednym razem, potem zaczynają się spowolnienia i przekroczenia czasu.

Krok 1, filtr według roli. Proszę wejść w „Użytkownicy" → „Wszyscy użytkownicy". Nad tabelą znajduje się rozwijana lista ról. Proszę wybrać odpowiednią (na przykład „Subskrybent"), kliknąć „Filtruj". WordPress pokaże tylko użytkowników z tą rolą.

Filtrowanie użytkowników WordPress według roli w panelu administracyjnym

Krok 2, liczba na stronę. Domyślnie widać 20 wpisów. Do pracy masowej to za mało. Przycisk „Opcje ekranu" (w prawym górnym rogu) otwiera panel, gdzie w polu „Liczba elementów na stronie" można ustawić 200, 500, a nawet 999. Proszę kliknąć „Zastosuj", strona przeładuje się i pokaże całą listę w jednej porcji.

Ustawianie liczby elementów na stronie w panelu administracyjnym WordPress

Krok 3, wybór masowy. Pole wyboru w nagłówku tabeli (obok tytułu „Nazwa użytkownika") zaznacza wszystkich na stronie jednocześnie. Następnie proszę ręcznie odznaczyć tych, których chce Pan zostawić: administratorów, redaktorów, kluczowych autorów.

Masowe zaznaczanie wszystkich użytkowników na stronie do usunięcia

Krok 4, usuwanie i ponowne przypisanie treści. Na rozwijanej liście „Działania" nad tabelą proszę wybrać „Usuń", kliknąć „Zastosuj". WordPress zapyta, co zrobić z treścią usuwanych użytkowników: opcja „Przypisz wszystkie wpisy do" + wybór administratora w sąsiednim polu zachowa posty; „Usuń całą zawartość" usunie wszystko bez możliwości odzyskania. Proszę potwierdzić i gotowe.

Okno dialogowe przekazywania treści przy masowym usuwaniu użytkowników

Wbudowana metoda jest niezawodna przy małych i średnich ilościach. Ale gdy liczba idzie w tysiące, każda strona generuje dziesiątki zapytań SQL przez PHP i serwer albo pada po max_execution_time, albo staje dęba. Do takich przypadków służą narzędzia poniżej.

Sposób 2: wtyczka Bulk Delete

Bulk Delete, bezpłatna wtyczka z ponad 300 000 aktywnych instalacji. Jej główną przewagą nad standardową metodą jest przetwarzanie wsadowe. Wtyczka usuwa użytkowników partiami po 50-100 sztuk, nie generując szczytowego obciążenia bazy danych. Oferuje też filtry, których nie ma w rdzeniu WordPressa.

Instalacja jest standardowa: „Wtyczki" → „Dodaj nową" → wyszukaj „Bulk Delete" → „Zainstaluj" → „Aktywuj". Po aktywacji w bocznym menu pojawia się sekcja „Bulk WP", a w niej „Bulk Delete Users".

Tutaj wybiera Pan/Pani rolę do usunięcia i konfiguruje jeden lub kilka dodatkowych filtrów:

  • data rejestracji: wcześniej lub później niż wskazana data;
  • nieaktywność: użytkownicy, którzy nie logowali się na stronie przez ostatnie N dni;
  • brak postów: konta bez żadnego wpisu;
  • wartość meta pola: na przykład usunięcie wszystkich, u których billing_country = 'RU'.
Strona masowego usuwania użytkowników wtyczki Bulk Delete

Przed uruchomieniem usuwania koniecznie należy kliknąć „Preview Users", wtyczka pokaże listę ID i adresów e-mail, które spełniają kryteria filtrów. Proszę sprawdzić, czy usuwa Pan/Pani dokładnie tych, których trzeba. Następnie proszę zaznaczyć checkbox potwierdzenia i kliknąć „Bulk Delete".

Z godnych uwagi alternatyw: WP Bulk Delete potrafi usuwać nie tylko użytkowników, ale także posty, strony, komentarze, taksonomie, jest to uniwersalne narzędzie do czyszczenia, jednak część funkcji jest dostępna tylko w wersji Pro. User Role Editor to przede wszystkim narzędzie do edycji ról i tworzenia niestandardowych, jednak w jego interfejsie dostępne jest również masowe usuwanie według roli (zakładka „Users").

Sposób 3: WP-CLI

WP-CLI rozwiązuje zadanie jednym poleceniem konsolowym. Bez paginacji, bez timeoutów. Potrzebny jest dostęp shell do serwera, SSH na VPS, hostingu dedykowanym lub lokalnym środowisku deweloperskim. Na tanim hostingu współdzielonym WP-CLI zazwyczaj jest niedostępny.

Najpierw proszę pobrać ID wszystkich użytkowników z wybraną rolą:

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

Wynik to ciąg ID oddzielonych spacją: 12 45 78 134 256. Proszę usunąć ich z przepisaniem treści na administratora (ID=1):

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

Można to zrobić jednym poleceniem, bez listy pośredniej:

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

Flaga --delete-posts zamiast --reassign całkowicie usuwa zarówno użytkowników, jak i ich treść. Proszę jej używać tylko wtedy, gdy zawartość usuwanych kont na pewno nie jest potrzebna.

WP-CLI działa bezpośrednio na bazie danych, z pominięciem PHP. Dla stu tysięcy użytkowników polecenie wykonuje się w 2-5 sekund. Jest to o rzędy wielkości szybsze niż jakakolwiek wtyczka i bezpieczniejsze niż ręczny SQL, ponieważ wp user delete kaskadowo czyści metadane, nie pozostawiając osieroconych wierszy.

Sposób 4: bezpośredni SQL

Dla tych, którzy potrzebują absolutnej kontroli nad każdym zapytaniem. SQL przez phpMyAdmin lub konsolę MySQL nie nakłada ograniczeń, ale też nie wybacza błędów.

Najpierw kopia zapasowa bazy. To nie jest zalecenie, a twardy wymóg. Jedna literówka w WHERE, na przykład administrator zamiast subscriber, i traci Pan/Pani dostęp do strony. Przywrócić można tylko z dumpu.

Proszę zalogować się do phpMyAdmin przez panel hostingu, wybrać bazę danych WordPress, otworzyć zakładkę „SQL".

Krok 1: znaleźć ID. Role są przechowywane w tabeli wp_usermeta, pole meta_key = 'wp_capabilities'. Proszę zastąpić subscriber wybraną rolą i skorygować prefiks wp_, jeśli jest inny:

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%';

Proszę zweryfikować wyniki wzrokowo. Skopiować uzyskane ID.

Krok 2: przepisać treść. Proszę zastąpić 1 ID użytkownika, któremu przekazuje Pan/Pani posty. Listę 123, 456, 789 proszę zastąpić ID z kroku 1:

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

Krok 3: usunąć użytkowników i metadane. Dokładnie w tej kolejności:

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

Jeśli trzeba usunąć również wpisy z komentarzami, najpierw należy wyczyścić tabele podrzędne:

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

I dopiero potem wp_users oraz wp_usermeta. Kolejność jest krytyczna: najpierw rekordy podrzędne, potem nadrzędne, w przeciwnym razie wystąpi naruszenie kluczy obcych.

Po wykonaniu SQL koniecznie proszę sprawdzić, czy usunięci użytkownicy rzeczywiście zniknęli z panelu administracyjnego, a wpisy (jeśli były przepinane) są widoczne pod nowym autorem.

⁉️🤔 Często zadawane pytania

Czy można przywrócić usuniętego użytkownika?

Nie. WordPress nie przechowuje usuniętych kont w koszu, w przeciwieństwie do postów i stron. Jedynym sposobem na ich odzyskanie jest przywrócenie kopii zapasowej bazy danych. Właśnie dlatego pełna kopia zapasowa przed jakimkolwiek masowym usuwaniem nie podlega dyskusji: to Pana/Pani jedyne zabezpieczenie.

Co stanie się z treściami usuniętego użytkownika?

Zależy to od wyboru dokonanego podczas usuwania. Opcja „Przypisz wszystkie treści" + administrator: posty i strony zostają zachowane, zmienia się jedynie ich autor. Opcja „Usuń wszystkie treści": posty, strony i pliki multimedialne są usuwane bez możliwości odzyskania. Komentarze usuniętych użytkowników pozostają na stronie, autor jest wyświetlany jako „Deleted User"; ich usunięcie to osobna operacja.

Jaki sposób jest najszybszy dla ponad 10 000 użytkowników?

WP-CLI. Jedno polecenie wp user delete $(wp user list --role=subscriber --format=ids) --reassign=1 wykonuje się w 2-5 sekund nawet na setkach tysięcy kont. SQL przez phpMyAdmin również jest szybki, ale wymaga ręcznego kopiowania identyfikatorów między zapytaniami. Wtyczki i wbudowana metoda są przy takich wolumenach bezużyteczne: przetwarzają dane przez PHP i napotykają ograniczenie max_execution_time.

Czy trzeba usuwać wp_usermeta razem z użytkownikami?

Tak. Jeśli usunie Pan/Pani tylko wp_users, w wp_usermeta pozostaną osierocone wiersze z metadanymi nieistniejących kont. Nie psują one strony, ale niepotrzebnie rozdmuchują bazę danych. Wtyczka Bulk Delete i WP-CLI (wp user delete) czyszczą metadane automatycznie. W przypadku ręcznego SQL należy koniecznie dodać drugie zapytanie DELETE FROM wp_usermeta.

Czy można usunąć tylko użytkowników bez postów?

Można. Wtyczka Bulk Delete oferuje gotowy filtr „Użytkownicy bez postów". W WP-CLI należy połączyć dwa polecenia: najpierw pobrać identyfikatory użytkowników danej roli, a następnie dla każdego sprawdzić obecność postów przez wp post list. W SQL należy dodać warunek AND u.ID NOT IN (SELECT DISTINCT post_author FROM wp_posts).

Teraz o bezpieczeństwie w praktyce. Najniebezpieczniejszy scenariusz to usuwanie przez SQL bez wcześniejszego podglądu. Nawet doświadczeni administratorzy popełniają błędy w klauzuli WHERE. Kopia zapasowa przed SQL to reguła, która sprawdza się raz na sto przypadków. Ale właśnie w tym jednym przypadku ratuje stronę.

Co wybrać do swojego zadania

Cztery sposoby pokrywają każdy scenariusz, od kilkudziesięciu rejestracji spamowych po sto tysięcy martwych kont. Oto krótka matryca:

  • Mniej niż 200 użytkowników, nie chce Pan/Pani instalować wtyczek → wbudowane akcje masowe. Trzy kliknięcia i problem rozwiązany.
  • Do 5 000, potrzebne są filtry według daty lub nieaktywności → wtyczka Bulk Delete. Najbezpieczniejsza opcja dla osób niepracujących z konsolą.
  • Dowolny wolumen, jest dostęp SSH → WP-CLI. Jedno polecenie, 2-5 sekund, rezultat.
  • Własny serwer, potrzebna jest kontrola nad każdym DELETE → bezpośredni SQL. Ale tylko wtedy, gdy dokładnie wie Pan/Pani, co robi, i wykonał/a kopię zapasową.

Główna zasada nie zależy od metody: kopia zapasowa, kopia zapasowa i jeszcze raz kopia zapasowa. Baza danych WordPress nie wybacza przypadkowych usunięć, a hosting nie przechowuje kopii w nieskończoność. Proszę wykonać kopię zapasową teraz i dopiero wtedy otworzyć listę użytkowników.