Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🧹 Jak całkowicie usunąć wtyczkę WordPress: krok po kroku czyszczenie bazy danych i plików

🧹 Jak całkowicie usunąć wtyczkę WordPress: krok po kroku czyszczenie bazy danych i plików

Strona zaczęła zwalniać, kopia zapasowa rozrosła się do gigabajta, a w phpMyAdmin dziesiątki tabel z prefiksami wtyczek, które „usunęli" Państwo rok temu. Brzmi znajomo?

Standardowy przycisk „Usuń" w sekcji wtyczek kasuje jedynie folder z wp-content/plugins. Cała reszta, tabele, opcje, zadania crona, shortkody w postach, pozostaje w bazie i na dysku. Deweloperzy realizują czyszczenie na różne sposoby: jedni sumiennie sprzątają po sobie przez uninstall.php, inni nie ruszają niczego.

Poniżej pełny algorytm usuwania wtyczki bez pozostałości: od panelu administracyjnego po ręczne SQL. Z kopią zapasową na każdym etapie i dokładnymi instrukcjami dla popularnych wtyczek.

💡 Szybki przegląd:

  • Usunięcie przez panel to tylko pierwszy krok; tabele, shortkody i zadania crona wymagają osobnego czyszczenia
  • Przed jakimikolwiek manipulacjami w bazie, pełna kopia zapasowa (wbudowanymi narzędziami hostingu lub wtyczką)
  • Dla WooCommerce, Yoast SEO, Wordfence i innych popularnych wtyczek istnieją własne stałe i zapytania SQL
  • Zdezaktywowana wtyczka to nie wtyczka „wyłączona", lecz „uśpiona"; jej pliki są dostępne dla bezpośredniego wywołania i stanowią wektor ataku

Dlaczego przycisk „Usuń" nie wystarcza

WordPress podczas usuwania wtyczki wywołuje jej uninstall.php lub callback z głównego pliku. Działa to jednak tylko wtedy, gdy deweloper stworzył taki plik. W praktyce około połowa wtyczek z katalogu WordPress.org albo nie ma uninstall.php, albo implementuje go częściowo: usuwa folder, ale nie rusza bazy.

Co zostaje po standardowym usunięciu:

Typ pozostałości

Gdzie szukać

Ryzyko

Tabele w BD

wp_* (prefiks wtyczki)

Wzrost bazy, spowolnienie zapytań

Wiersze w wp_options

option_name LIKE %pluginname%

Zaśmiecenie opcji autoload

Wiersze w wp_postmeta

meta_key LIKE %pluginname%

Martwe dane przy pobieraniu postów

Shortkody w treści

Tekst postów/stron

Uszkodzone [shortcode] na froncie

Zadania crona

wp_optionscron

Zbędne żądania HTTP do wp-cron

Pliki poza folderem wtyczki

wp-content/uploads/

Śmieci na dysku

Reguły w .htaccess

Katalog główny witryny

Konflikty z nowymi wtyczkami

Szczególnie krytyczne są wiersze z flagą autoload: WordPress ładuje je przy każdym żądaniu. Pół setki zbędnych wierszy autoload dodaje 30-80 ms do odpowiedzi serwera. Na pierwszy rzut oka to drobiazgi, ale przy 100 000 odsłon miesięcznie jest to odczuwalny spadek wydajności.

Dezaktywacja vs usunięcie: jaka jest różnica

Różnica jest zasadnicza i warto ją rozumieć przed rozpoczęciem czyszczenia.

Kryterium

Dezaktywacja

Pełne usunięcie

Pliki wtyczki

Pozostają w wp-content/plugins/

Usunięte

Kod

Nie jest wykonywany, dostępny do odczytu

Nieobecny

Tabele BD

Zachowane

Zależy od dewelopera

Ustawienia

Zachowane

Zależy od uninstall.php

Aktualizacje

Przychodzą (dla darmowych z.org)

Nie przychodzą

Podatności

Kod na serwerze, wektor ataku

Brak zagrożenia

Odwracalność

Jedno kliknięcie, wtyczka znów aktywna

Tylko z kopii zapasowej

Zdezaktywowana wtyczka to nie wtyczka „wyłączona", lecz „uśpiona". Pliki PHP fizycznie leżą na serwerze. Jeśli w kodzie znaleziono podatność, atakujący odwołuje się do pliku bezpośrednio przez ścieżkę w wp-content/plugins/, omijając logikę WordPress. Zapory WAF nie rozwiązują tego problemu: najlepszą ochroną jest całkowite usunięcie nieużywanego kodu z serwera.

Zasada jest prosta: jeśli nie korzystają Państwo z wtyczki dłużej niż tydzień, należy ją usunąć. Skonfigurowanie od nowa jest szybsze niż usuwanie skutków włamania przez dziurę w porzuconym kodzie.

Czyszczenie krok po kroku: 4 etapy

Krok 1: Usunięcie przez panel administracyjny

Pierwszy etap, standardowy. Należy wejść w Wtyczki → Zainstalowane, znaleźć potrzebną. Aktywne są podświetlone niebieskim paskiem, zdezaktywowane są bez niego.

Należy kliknąć „Usuń" pod nazwą, potwierdzić przyciskiem „Tak, usuń te pliki". WordPress wywoła uninstall.php wtyczki (jeśli istnieje) i usunie folder z wp-content/plugins.

Lista wtyczek WordPress z przyciskiem usuwania

W przypadku prostych wtyczek, lekkiego widżetu, zamiany logo na stronie logowania, na tym czyszczenie się kończy. Nie tworzą one tabel i nie zapisują danych w wp_postmeta. Jednak wtyczki do cache’owania, SEO, bezpieczeństwa, galerii i konstruktorów stron wymagają kontynuacji.

Krok 2: Czyszczenie plików przez FTP

Niektóre wtyczki tworzą foldery poza wp-content/plugins/. Typowe lokalizacje:

  • wp-content/uploads/plugin-name/, cache, skompresowane obrazy, wyeksportowane pliki
  • wp-content/ngg/, NextGEN Gallery
  • wp-content/ewww/, EWWW Image Optimizer
  • wp-content/backup/, wtyczki do kopii zapasowych

Należy połączyć się z serwerem przez FTP (FileZilla, WinSCP) lub menedżer plików hostingu. Przejść do wp-content/, znaleźć folder z nazwą wtyczki i usunąć go. Przed usunięciem warto pobrać folder lokalnie, jeśli znajdowały się w nim przesłane przez użytkownika pliki, i przywrócić je.

Wtyczki do cache’owania (WP Rocket, W3 Total Cache, LiteSpeed Cache) dodatkowo zapisują dane w wp-content/cache/ i tworzą wp-content/advanced-cache.php. Plik advanced-cache.php należy usunąć ręcznie przez FTP, a w wp-config.php znaleźć i usunąć wiersz:

1define('WP_CACHE', true);

Krok 3: Usunięcie shortkodów z treści

Wtyczki dodające shortkody (formularze, galerie, slidery, tabele) po usunięciu pozostawiają gołe [shortcode] w tekście postów. Wygląda to nieestetycznie i dezorientuje czytelnika.

Szybki sposób na wyciszenie nieużywanych shortkodów to jeden wiersz w functions.php aktywnego motywu:

1add_shortcode('pluginshortcode', '__return_false');
Kod w functions.php do wyłączenia shortcode wtyczki

Należy zastąpić pluginshortcode tagiem Państwa shortkodu. Na przykład: nggallery, gravityform lub contact-form-7. Funkcja __return_false zwraca false i shortkod znika z frontu bez usuwania z tekstu postów.

Kod należy dodać przez motyw potomny lub wtyczkę Code Snippets, zmiany w functions.php motywu nadrzędnego zostaną utracone podczas następnej aktualizacji. Jeśli zdecydują się Państwo później przywrócić wtyczkę, wystarczy usunąć ten wiersz.

Krok 4: Czyszczenie bazy danych

Najbardziej odpowiedzialny etap. Należy wykonać pełną kopię zapasową bazy przed jakimkolwiek zapytaniem SQL usuwającym dane, eksport przez phpMyAdmin zajmuje pół minuty i ratuje przed nieodwracalnymi błędami.

4a. Należy znaleźć tabele wtyczki. Proszę wejść do phpMyAdmin (przez cPanel lub panel administracyjny hostingu), wybrać bazę danych witryny. Szukać tabel z prefiksem wtyczki: wp_wc_* (WooCommerce), wp_yoast_* (Yoast SEO), wp_wf* (Wordfence). Zaznaczyć je, na dole wybrać „Drop" → potwierdzić.

4b. Automatyzacja przez Advanced Database Cleaner. Jeśli nie chce Pan/Pani pracować bezpośrednio w phpMyAdmin, proszę zainstalować Advanced Database Cleaner. Darmowa wtyczka skanuje bazę, znajduje osierocone tabele i wpisy, a następnie usuwa je jednym kliknięciem.

4c. Proszę wyczyścić wp_options. Nawet jeśli wtyczka nie tworzyła osobnych tabel, prawie na pewno zapisywała dane w wp_options. Proszę wykonać w phpMyAdmin (zakładka SQL):

1SELECT * FROM wp_options WHERE option_name LIKE '%pluginname%';

Proszę zastąpić pluginname częścią nazwy wtyczki. Proszę upewnić się, że wiersze rzeczywiście dotyczą usuniętej wtyczki, a następnie:

1DELETE FROM wp_options WHERE option_name LIKE '%pluginname%';

4d. Proszę wyczyścić zadania cron. Niektóre wtyczki rejestrują własne zdarzenia cron. Proszę zainstalować WP Crontrol, pokazuje on wszystkie zarejestrowane zadania cron na jednej liście. Proszę znaleźć zdarzenia z nazwą wtyczki i usunąć je ręcznie.

Specyfika usuwania popularnych wtyczek

Każda duża wtyczka pozostawia unikalny ślad. Poniżej znajdują się dokładne instrukcje dla najczęściej spotykanych.

WooCommerce

WooCommerce tworzy ponad 16 tabel w bazie danych. Aby podczas usuwania zostały one automatycznie wyczyszczone, proszę dodać w pliku wp-config.php (przed linią /* That's all, stop editing! */):

1define('WC_REMOVE_ALL_DATA', true);

Stała ta zmusza WooCommerce do wywołania pełnego uninstall.php podczas usuwania, co spowoduje usunięcie wszystkich tabel wp_woocommerce_* i wp_wc_*, w tym produktów, zamówień i kuponów. Operacja jest nieodwracalna, dlatego kopia zapasowa jest obowiązkowa.

Po usunięciu wtyczki proszę dodatkowo sprawdzić wp_options, WooCommerce zapisuje tam dziesiątki wierszy z prefiksem woocommerce_:

1SELECT * FROM wp_options WHERE option_name LIKE '%wc_%';
Zapytanie SQL do wyszukiwania zamówień WooCommerce w bazie danych

Jeśli wiersze zostały znalezione, a wtyczka jest już usunięta, proszę wykonać zapytanie DELETE z tym samym warunkiem.

Yoast SEO

Yoast SEO pozostawia wpisy w wp_postmeta i wp_usermeta, a także własne tabele wp_yoast_indexable i wp_yoast_seo_links.

Najpierw proszę wyczyścić wp_postmeta:

1SELECT * FROM wp_postmeta WHERE meta_key LIKE '%yoast%';
Wyszukiwanie wpisów meta Yoast SEO w tabeli wp_postmeta

Po upewnieniu się, że są to dane Yoast, proszę wykonać:

1DELETE FROM wp_postmeta WHERE meta_key LIKE '%yoast%';

Następnie wp_usermeta:

1SELECT * FROM wp_usermeta WHERE meta_key LIKE '%yoast%';
Wyszukiwanie wpisów Yoast SEO w tabeli wp_usermeta

Proszę usunąć znalezione dane analogicznym zapytaniem DELETE. Yoast rejestruje również zdarzenie crona wpseo_onpage_fetch, proszę je usunąć przez WP Crontrol. Tabele wp_yoast_indexable i wp_yoast_seo_links proszę usunąć ręcznie przez phpMyAdmin.

Akismet

Akismet, standardowa wtyczka chroniąca przed spamem w komentarzach, jest domyślnie instalowana z WordPressem. Po jej usunięciu dane pozostają w wp_commentmeta:

1SELECT * FROM wp_commentmeta WHERE meta_key LIKE '%akismet_%';
Zapytanie SQL do wyszukiwania danych Akismet w komentarzach

Następnie:

1DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet_%';

Jeśli na stronie są tysiące komentarzy, tabela wp_commentmeta może ważyć dziesiątki megabajtów. Po wyczyszczeniu proszę zoptymalizować tabelę:

1OPTIMIZE TABLE wp_commentmeta;

Więcej sposobów walki ze spamem znajdą Państwo w naszym materiale jak zatrzymać spam w komentarzach WordPress: wszystkie 18 rozwiązań.

Gravity Forms

Gravity Forms tworzy 9 tabel w bazie danych (wp_gf_*, wp_rg_*). Przed usunięciem proszę przejść do Forms → Settings → Uninstall i potwierdzić. Następnie proszę usunąć wtyczkę z panelu administracyjnego.

Po usunięciu proszę sprawdzić wp_options:

1SELECT * FROM wp_options WHERE option_name LIKE '%gravity%' OR option_name LIKE '%gf_%';
Zapytanie SQL czyszczenia wp_options dla Gravity Forms

Znalezione wiersze proszę usunąć analogicznym zapytaniem DELETE.

Wordfence

Wordfence, jedna z najcięższych wtyczek bezpieczeństwa: tworzy 23 tabele z prefiksem wp_wf*. Standardowe usunięcie przez panel nie czyści ich.

Oficjalna wtyczka pomocnicza Wordfence Assistant została zamknięta przez dewelopera w grudniu 2025 roku. Dlatego czyścimy ręcznie: proszę usunąć główną wtyczkę Wordfence przez panel, następnie przejść do phpMyAdmin i wykonać:

1SELECT * FROM wp_options WHERE option_name LIKE '%wordfence%' OR option_name LIKE '%wf%';

Znalezione wiersze proszę usunąć zapytaniem DELETE z tym samym warunkiem. Następnie proszę znaleźć i usunąć (DROP) wszystkie tabele z prefiksem wp_wf, jest ich zwykle 23, od wp_wfblockediplog do wp_wflivetraffichuman. Przez FTP proszę usunąć folder wp-content/wflogs/ i plik wordfence-waf.php w katalogu głównym witryny, jeśli pozostały.

Wtyczka tworzy 3 tabele (wp_ngg_*) i folder wp-content/ngg/ z przesłanymi galeriami.

Najpierw proszę usunąć wtyczkę przez panel administracyjny. Następnie przez FTP proszę usunąć folder wp-content/ngg/, uprzednio zapisując obrazy galerii, jeśli są potrzebne. W phpMyAdmin proszę wykonać:

1SELECT * FROM wp_options WHERE option_name LIKE '%ngg%';

Znalezione wiersze proszę usunąć zapytaniem DELETE z tym samym warunkiem. Tabele wp_ngg_pictures, wp_ngg_galleries i wp_ngg_album proszę usunąć ręcznie (DROP).

EWWW Image Optimizer

EWWW przechowuje dane o każdym zoptymalizowanym obrazie w tabeli wp_ewwwio_images: ścieżkę do pliku, początkowy rozmiar, rozmiar po kompresji. Tworzy również folder wp-content/ewww/ z pamięcią podręczną.

Proszę usunąć folder przez FTP. Następnie w phpMyAdmin:

1SELECT * FROM wp_options WHERE option_name LIKE '%ewww%';
Zapytanie SQL czyszczenia opcji EWWW Image Optimizer

Usuń znalezione wpisy i skasuj tabelę wp_ewwwio_images.

WP All Export

Wtyczka tworzy 4 tabele w bazie danych. Po usunięciu przez panel administracyjny wejdź do phpMyAdmin, znajdź tabele z prefiksem wp_pmxe_*, zaznacz je i wykonaj „Drop". Dodatkowo sprawdź wp_options pod kątem klucza pmxe, wtyczka przechowuje tam ustawienia ostatniego eksportu.

Więcej o pełnym cyklu usuwania wtyczek w instrukcji wideo poniżej.

⁉️🤔 Często zadawane pytania

Czy bezpiecznie jest usuwać tabele wtyczki bezpośrednio przez phpMyAdmin?

Jest to bezpieczne przy spełnieniu dwóch warunków: wykonał Pan/Pani pełną kopię zapasową bazy danych i zidentyfikował Pan/Pani tabele jako należące do już usuniętej wtyczki. Tabele zewnętrznych wtyczek zawsze mają rozpoznawalny prefiks: wp_wc_, wp_yoast_ lub wp_wf. Systemowych tabel WordPressa (wp_posts, wp_options, wp_users, wp_comments, wp_postmeta i wp_usermeta) nie wolno ruszać poleceniem DROP, można je czyścić wyłącznie selektywnymi DELETE.

Co zrobić, jeśli po usunięciu wtyczki strona wyświetla biały ekran?

Należy przywrócić wtyczkę z kopii zapasowej: wgrać folder przez FTP, zaimportować jej tabele. Przyczyną najprawdopodobniej jest plik functions.php motywu, mógł w nim pozostać wywołanie funkcji wtyczki bez fallbacku. Proszę znaleźć takie wywołania i opakować je w function_exists() lub usunąć, a następnie powtórzyć usuwanie wtyczki.

Jak znaleźć wszystkie ślady wtyczki w bazie danych?

Proszę zainstalować wtyczkę Advanced Database Cleaner. Skanuje ona wszystkie tabele pod kątem osieroconych danych i pokazuje pełną listę: tabele, wiersze w wp_options i wp_postmeta, zadania cron. Jest to szybsze i bezpieczniejsze niż ręczne wyszukiwanie przez phpMyAdmin.

Czy trzeba usuwać wtyczki dostarczone razem z motywem?

Tak, jeśli ich Pan/Pani nie używa. Wtyczki wchodzące w skład motywów, WPBakery Page Builder, Slider Revolution, ACF Pro, często mają ograniczoną licencję i nie otrzymują aktualizacji bezpieczeństwa. Zdezaktywowany, przestarzały WPBakery ze znaną podatnością to prosta droga do włamania. Jeśli nie są używane, należy je usunąć.

Czy można przywrócić wtyczkę po całkowitym usunięciu?

Tylko z kopii zapasowej. Po wyczyszczeniu tabel i wp_options wszystkie ustawienia wtyczki są bezpowrotnie tracone. Właśnie dlatego powyższy algorytm zbudowany jest od prostego do radykalnego: najpierw standardowe usunięcie (odwracalne), potem czyszczenie plików i dopiero na końcu baza danych. Proszę przechodzić etapy sekwencyjnie, nie przeskakiwać od razu do phpMyAdmin.

Czy dane wtyczki pozostały w WordPress Multisite?

W Multisite każda podstrona ma własne tabele: wp_2_options, wp_2_postmeta i tak dalej. Po usunięciu wtyczki przez superadministratora proszę sprawdzić tabele każdej podstrony, wp_*_options i wp_*_postmeta dla wszystkich ID blogów. Wtyczka mogła być aktywowana na poszczególnych stronach sieci i pozostawić wpisy w ich tabelach.

Podsumowanie: kiedy pełne czyszczenie jest uzasadnione

Jeśli ma Pan/Pani niewielką stronę i usuwa wtyczkę raz na pół roku, standardowe usunięcie przez panel i jednorazowe wyczyszczenie wp_options jest wystarczające.

Jeśli jednak strona ma kilka lat, przewinęły się przez nią dziesiątki wtyczek, a kopia zapasowa rozrosła się do gigabajta, chirurgiczne czyszczenie według powyższej instrukcji odczuwalnie zmniejszy bazę danych i przyspieszy panel administracyjny. W praktyce czyściliśmy tysiące osieroconych wpisów w wp_postmeta i dziesiątki zbędnych tabel, czas odpowiedzi panelu administracyjnego skracał się niemal o połowę.

Proszę przyjąć zasadę: usunął Pan/usunęła Pani wtyczkę, proszę przejść checklistę (FTP → wp_options → cron → tabele). Dziesięć minut dziś oszczędza godziny jutro, gdy rozdęta baza danych kładzie stronę w szczycie ruchu.

A która wtyczka pozostawiła najwięcej śmieci po usunięciu na Pana/Pani stronie? Proszę napisać w komentarzach.