Ostatnio zwrócił się do mnie znajomy, czy nie zerknął bym na/do jego WordPressa, na którym działa „prosta strona klubowa”, bo rozmiar pliku z kopią bazy danych ciągle się powiększa – a poza tym, że „czasem przetestuje jakiś nowy dodatek” to na stronie nie dzieje się nic, co by wyjaśniało taki stan rzeczy (dochodzą głównie zdjęcia).
Samo zestawienie w jednym zdaniu „czasem przetestuje jakiś dodatek” i „rozrost bazy danych” właściwie wszystko wyjaśnia – najwidoczniej trzeba posprzątać za innych, bo nie każdy autor wtyczki dba o to, by sprzątać po swoim dziele.
Spis treści w artykule
WordPress i pozostałości po starych wtyczkach
Szybki rzut oka do panelu administracyjnego (wp-admin) oraz do bazy danych (phpMyAdmin) tylko potwierdził moje przypuszczenia – z racji „profilu strony” znajomy często testuje różne dodatki/rozszerzenia (wtyczki), które – w mniej lub bardziej sensowny sposób – mają podnieść atrakcyjność strony.
Większość tych wtyczek prędzej czy później znika – czy to ze względu na znikomą przydatność, czy fakt, że „trafiła się lepsza/fajniejsza”.
Tak naprawdę to nie ma większego znaczenia dlaczego pojawiają się i znikają – ważne, że część z tych wtyczek zostawia po sobie śmieci. A z każdą przetestowaną wtyczką, której autor nie zadbał o należyte wyczyszczenie po sobie utworzonych m.in. wpisów w bazie danych przybywa…
Może nie posprzątam po sobie, ale dam znać, że jestem
Co ciekawe, czasem się zdarza, że autorowi wtyczki nie są obce tzw. „haki” (WordPress API Hooks), bo trafiają się wtyczki, które np. śmiało korzystają z możliwości wykonania zdefiniowanej akcji (np. wyświetlenie jakiejś informacji, czy zachęty do zakupu wersji pro/premium) zaraz po aktywacji wtyczki – tylko dziwnym trafem, jakoś pomijają (na szczęście nie wszyscy, na szczęście coraz rzadziej) akcje związane z działaniem podczas odinstalowywania wtyczki.
A wydaje się oczywiste, że dobrym zwyczajem powinno być dbanie o higienę bazy danych również tego użytkownika, który z jakiś przyczyn postanowił rozstać się z naszą wtyczką…
Zanim skasuje – zapytaj
Ale jeśli właśnie ruszyłeś w tej chwili do swojego ulubionego edytora by dodać taki element do swojej wtyczki – zaczekaj chwilę… Bo pewnie samemu nieraz zdarzyło Ci się jakąś wtyczkę odinstalować tylko po to, by za chwilę ponownie ją zainstalować – choćby szukając przyczyny jakiejś usterki na stronie.
Dlatego moim zdaniem warto dać wybór użytkownikowi – niech on sam zdecyduje, czy chce by podczas odinstalowywania (lub ew. nawet samej dezaktywacji) wtyczki z jego strony zniknęły również wszystkie elementy, jakie w międzyczasie zostały utworzone za pomocą wtyczki (wpisy w bazie danych, logi, itp.).
Wystarczy zwykłe pole do zaznaczenia w ustawieniach wtyczki/WordPressa.
WordPress: Akcje po aktywacji, dezaktywacji i odinstalowaniu wtyczki
Dobra – wstęp dla Google Bota za nami (;-)), teraz można przystąpić do sedna sprawy, czyli sprawdzimy jak najprościej można dodać do naszej wtyczki akcje/działania, które zostaną wykonane podczas aktywacji, dezaktywacji bądź odinstalowywania wtyczki.
Akcje podczas odinstalowywania wtyczki
Zacznę od końca, ale moim zdaniem ważniejsze, by wtyczka posprzątała po sobie, niż zachęcała do konfiguracji zaraz po aktywacji.
W tym konkretnym przypadku możemy skorzystać z 2 alternatywnych metod – tak naprawdę nie ma chyba większego znaczenia na która się zdecydujecie, obie są tak samo skuteczne, reszta to kwestia estetyki, wygody i przyzwyczajenia.
Słyszałem/czytałem mniej więcej tyle samo plusów/minusów za każdą z tych metod – i choć ja osobiście preferuje metodę opartą na hakach, to wynika to głównie ze wspomnianej już estetyki i przyzwyczajenia :-)
Plik uninstall.php
W tym przypadku tworzymy oddzielny plik w katalogu naszej wtyczki (uninstall.php), w którym umieszczamy wszystkie akcje/działania, jakie mają zostać wykonane podczas odinstalowywania naszej wtyczki.
Podstawowa struktura pliku wygląda tak:
<?php
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; }
# akcja do wykonania
?>
Ale dla lepszego zobrazowania załóżmy, że chcemy podczas odinstalowywania naszej wtyczki skasować również ustawienia, które wtyczka zapisywała w tabeli „optione”, a konkretnie wpisie „webinsider_plugin_settings”.
W takim przypadku kod pliku unisntall.php (w najprostszej postaci) będzie wyglądał tak:
<?php
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; }
# akcja do wykonania
$option_to_delete = 'webinsider_plugin_settings';
delete_option( $option_to_delete );
?>
Korzystamy z haka
Inna metoda, to wykorzystanie odpowiedniego punktu zaczepienia (haka), dzięki czemu możemy zdefiniować działania które zostaną wykorzystane w wybranej sytuacji – w tym przypadku podczas odinstalowywania wtyczki.
Kod umieszczamy w głównym pliku wtyczki, i jego najprostsza forma to:
register_uninstall_hook( __FILE__, 'webinsider_plugin_uninstall' );
function webinsider_plugin_uninstall() {
# akcja do wykonania
}
A w wersji z przykładu powyżej będzie kod wyglądał tak:
register_uninstall_hook( __FILE__, 'webinsider_plugin_uninstall' );
function webinsider_plugin_uninstall() {
# akcja do wykonania
$option_to_delete = 'webinsider_plugin_settings';
delete_option( $option_to_delete );
}
Aktywacja i dezaktywacja
W przypadku operacji „do wykonania” podczas aktywacji i dezaktywacji wtyczki również możemy posłużyć się odpowiednimi hakami.
Akcja przy aktywacji wtyczki:
register_activation_hook( __FILE__, 'webinsider_plugin_activation' );
Akcja przy dezaktywacji wtyczki:
register_deactivation_hook( __FILE__, 'webinsider_plugin_deactivation' );
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Na stronie jednego z klientów było zainstalowano około 100 wtyczek. Bawił się ze stroną, w rezultacie czego ona zaczęła strasznie wolno chodzić :)
100 wtyczek zainstalowanych – całkiem nieźle, zwłaszcza, jak większość z nich jest aktywna…
Na jednej „z moich stron” jest aktywnych ok 60-70, choć ich liczbę trochę podbijają „małe dedykowane dla tej strony” wtyczki (wprawdzie/pewnie można by je zebrać w jedną, ale tak jest celowo).
To jeszcze z ciekawostka – często frontend (to co widzi niezalogowany czytelnik) działa dużo sprawniej niż backend (wp-admin), bo niezalogowany użytkownik korzysta choćby z cache, a „administrator” (zalogowany użytkownik) zazwyczaj nie. Do tego kilka dodatkowych skryptów w panelu, i od razu widać po obciążeniu serwera, że na stronie jest zalogowany jakiś admin – dodatkowe zabezpieczenie ;-)