Tworzysz stronę internetową i potrzebujesz pomocy?

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.

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' );
(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Tworzysz stronę internetową i potrzebujesz pomocy?
Patryk
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)