Jak wywalić wtyczkę z serwera jeśli rozwaliła nam stronę?

Co prawda od wersji 5.2 WordPress ma już wdrożoną dodatkową „ochronę przed krytycznymi błędami” i biały ekran śmierci, mordujący wszystko powinien być rzadszym gościem (do panelu admina ma się podobno móc dobić mimo problemów na froncie) to jednak warto wiedzieć jak „wyłączyć” wtyczkę ręcznie.

Uwaga!
jeśli wtyczka zbyt mocno „rzeźbiła” w bazie danych czy kluczowych plikach to samo jej usunięcie niewiele pomoże.

Szczęściem takich hardcorowych psujek jest nie za wiele i trzeba mieć wybitnego pecha żeby trafić je z legalnych kanałów dystrybucji. Oczywiście w kanałach typu „dowolna wtyczka i motyw za 1 dolara” czy w tych „kupionych na torrentach” poprawność działania już nie jest regułą, bo stamtąd pochodzą najdziwniejsze przypadki problemów, czy to wywołanych świadomie czy też przez nieudolnych hakierów.

Tak czy inaczej proces awaryjnego wyłączania wtyczki sprowadza się do zmiany jej położenia/nazwy. Chodzi o to żeby WordPress stracił ją z widoku i nie ładował podczas działania. Osiągamy to poprzez:

  • skasowanie katalogu/plików wtyczki (radykalne i niewskazane jeśli by zaszła potrzeba odzyskania czegoś, czy też analizy problemu)
  • przeniesienie wtyczki na lokalny komputer (rozwiąże to problem skasowania, ale pojawi się nowy brak wtyczki na serwerze więc nie można podjąć próby ustalenia co się wydarzyło)
  • zmiana nazwy katalogu/plików wadliwej wtyczki w katalogu z wtyczkami (teoretycznie zmiana nazwy powinna wtyczkę wyłączyć, ale ktoś nad wyraz złośliwy może zmodyfikować kod wtyczki np. na zawsze włączoną)
  • przeniesienie katalogu/plików wadliwej wtyczki poza katalog z wtyczkami a najlepiej w ogóle poza katalog główny strony www (polecane podejście)

Proces zmiany lokalizacji katalogu możemy dokonać przez różne menedżery plików przez www np. ten z cPanel, lub programy do zdalnego zarządzania plikami na serwerze np. poprzez protokół FTP

Procedura awaryjnego usuwania niechcianej wtyczki z serwera

1 Najpierw musimy ustalić nazwę katalogu lub pliku wtyczki do usunięcia. Często komunikat błędu wskazuje przyczynę (podaje plik generujący błąd) ale to niekoniecznie musi być prawdą :/

2 Musimy ustalić lokalizację katalogu z wtyczkami domyślnie to /wp-content/plugins/… dla normalnych wtyczek, lub /wp-content/mu-plugins/… dla wtyczek które zawsze działają i których nie da się wyłączyć z poziomu panelu administracyjnego (co najwyżej można je z poziomu panelu usunąć).

3 Wybieramy najwygodniejsze z dostępnych narzędzie do zmiany położenia plików. Czy to WinSCP do połączeń zdalnych czy menedżera z panelu zarządzania serwerem przez www.

4 Zmieniamy na serwerze lokalizację katalogu/pliku wtyczki na taką niedostępną z poziomu www. Zazwyczaj wychodzimy ponad katalog html_public albo www. Jeśli to niemożliwe to tworzymy w katalogu głównym jakiś katalog na śmiecie np. o nazwie „smieci” i do niego przekładamy psująca wszystko wtyczkę. Gdy uznamy że jednak nie chcemy się bawić w przenoszenie (co jest nieroztropne zazwyczaj) to zróbmy choć jej kopię na lokalnym komputerze przed skasowaniem plików na serwerze.

Co może pójść nie tak 🙁

Wtyczka może narozrabiać w bazie – tego się nie ogarnie samemu jeżeli nie zna się specyfiki bazy danych i kodu wtyczki, generalnie potrzebny będzie ogarnięty developer a nie instalator wtyczek i motywów :/ W większości przypadków taniej wyjdzie odzyskać backup. Zakładam że jako osoba wysoce świadoma przed instalacją czy upgrade dziwnej wtyczki robisz backup.

Wtyczka może namieszać w plikach konfiguracyjnych. Jeśli procedura zmiany katalogu nie rozwiązała problemu i nadal jest biały ekran śmierci lub inne czary jak blokowanie dostępu czy wysypywanie się grafik to warto zajrzeć do plików .htaccess i wp-config.php w katalogu głównym (lub wynoszonych jeszcze piętro wyżej przez niektórych instalatorów ze względów bezpieczeństwa) Być może coś te wtyczki tam dopisały do plików i stąd trwający nadal problem. Samo skasowanie wtyczki nie skasuje tego co gdzieś podopisywała. Tu bezwzględnie trzeba zrobić kopie zapasowe tych plików konfiguracyjnych zanim zacznie się w nich grzebać.

Katalog z wtyczkami może być osadzony poza standardową lokalizacją, sprawdź czy w wp-config.php nie masz ustawionych jakiś alternatywnych ścieżek przy zmiennych:

define('WPMU_PLUGIN_DIR', '/full/path/to/directory/my-plugin/');
define('WPMU_PLUGIN_URL', 'http://URL/to/directory/my-plugin/');
define('WP_PLUGIN_DIR', '/full/path/to/directory/plugins/' );
define('WP_PLUGIN_URL', 'http://URL/to/directory/plugins/');

wtedy szukaj wadliwej wtyczki w tych alternatywnych katalogach.

Narzędziówka

Ja pod windows to pracy z plikami używam programu winscp bo obsługuje wszystkie popularne szyfrowane formaty transmisji danych, jest mały i nie wymaga instalacji przez co zawsze siedzi na dyżurnym pendrivie.

Oczywiście wszelkie narzędzia używające szyfrowanej transmisji są w porządku. Skoro taki dinozaur jak ja nie używa już czystego FTP to tym bardziej Ty nie używaj już protokołu FTP bez szyfrowania. FTPS jest twoim przyjacielem. Tak czy inaczej praca na zdalnym serwerze (przesyłanie plików też w to wchodzi) bez szyfrowania transmisji to zdecydowanie słaby pomysł.

Czysty plik wp-config.php (taki z instalatora) nazywa się wp-config-sample.php i zazwyczaj zostaje po instalacji w katalogu głównym. Stanowi on dobrą bazę do porównania co zostało zmienione w pracującym pliku. Jeśli go nie ma w głównym katalogu to zawsze można go wypakować z pliku instalacyjnego wordpressa.

Jeżeli wiesz że plik .htaccess nie był ręcznie modyfikowany to zmień mu nazwę na inną. Wtedy twój serwer nie będzie go rozumiał i stosował zawartych w nim poleceń (np. blokowania twojego adresu IP). Pamiętaj jednak że wtedy ustawienia przyjaznych adresów (panel administracyjny>ustawienia>bezpośrednie odnośniki) znikną, więc jeśli ich używasz to się posypie wszystko. Jednak to nie problem, w razie potrzeby jak je ustawisz ponownie w panelu to WordPress sobie odtworzy .htaccess z właściwymi ustawieniami. Czasem w .htaccess są dodawane różne ustawienia np. wersja php tak więc nie działaj pochopnie i nie kasuj go.


Przydatne:

Wątek w QA: Jak wyłączyć wtyczkę gdy panel administracyjny jest niedostępny?