Dodano 2016-08-08 22:59:12 przez Daniel
Wiele wtyczek po usunięciu zostawia po sobie wiele niepotrzebnych danych w bazie. W tej części kursu podejdziemy do sprawy nieco bardziej profesjonalnie. Zadbamy o to aby domyślne ustawienia wtyczki były dodawane tylko w momencie aktywacji wtyczki i jeśli nie zostało to zrobione wcześniej. Zadbamy także o porządek w bazie, jeśli użytkownik wtyczki z niej zrezygnuje, oczywiście uświadamiając go o tym w postaci zapytania o potwierdzenie usunięcia zapisanych danych wtyczki. Aby jak najlepiej a zarazem jak najprościej zobrazować powyższe zagadnienia wykorzystamy możliwość tworzenia własnych opcji oferowaną przez WordPress
Bez zbędnej zwłoki przejdźmy do budowy naszej trzeciej wtyczki. Co tutaj zrobimy? Prostą wtyczkę z jedną podstroną w panelu administratora wykorzystując wiedzę z części pierwszej. Na naszej podstronie będzie prosty formularz zawierający w sobie jedno pole tekstowe. Pole tekstowe będzie zawierać opcję naszej wtyczki. I to w zasadzie wszystko, w polu będzie widoczny tekst a po kliknięciu przycisku aktualizuj, tekst zostanie zaktualizowany.
Utworzymy także funkcję, która w momencie aktywacji wtyczki będzie zapisywała domyślny tekst w naszej opcji, ale tylko wtedy, gdy taka opcja nie będzie istniała (a będzie istniała jeśli dezaktywujemy i aktywujemy wtyczkę). Utworzymy także funkcję, która w momencie dezaktywacji będzie odwracała zapisany w opcji tekst. Ostatnią kwestią jaką zajmiemy się w tej części jest odinstalowanie wtyczki. W momencie, w którym użytkownik kliknie odnośnik „usuń wtyczkę” zostanie zapytany czy usunąć także wszystkie dane i jeśli zatwierdzi wybór opcja wtyczki zostanie usunięta razem z wtyczką.
To by było na tyle. Przejdźmy do kodowania. Na początek stworzymy prostą wtyczkę jak w części pierwszej.
/** Plugin Name: Moja trzecia wtyczka Version: 1.0 Description: Wtyczka z własną opcją Author: Daniel Kuczewski Author URI: http://zaawansowanywordpress.pl Plugin URI: http://zaawansowanywordpress.pl/3-aktywacja-dezaktywacja-opcje/ */ add_action( 'admin_menu', 'mtw_add_menu' ); function mtw_add_menu(){ add_menu_page( 'Strona główna wtyczki', 'Moja trzecia wtyczka', 'administrator', 'moja-trzecia-wtyczka', 'glowna_moja_trzecia_wtyczka', '', 100 ); } function glowna_moja_trzecia_wtyczka(){ echo "Formularz opcji"; }
Powyższy kod został już dokładnie omówiony Tutaj.Teraz skoro mamy już jakieś podstawy zajmiemy się aktywacją wtyczki.
Do „zaczepienia” funkcji aktywacji wtyczki służy funkcja register_activation_hook()
. Funkcja ta pobiera dwa parametry:
Dodajmy wiec tę funkcję do naszej wtyczki
register_activation_hook(__FILE__, 'mtw_activation'); function mtw_activation() { //kod aktywacji wtyczki }
Teraz zajmijmy się zadaniem głównym funkcji aktywacji, czyli sprawdzeniem czy istnieje opcja a jeśli nie to dodanie jej.
Naszą opcję nazwiemy mtw_opcja. Do sprawdzenia czy opcja już istnieje wykorzystamy funkcję Get_option('nazwa_opcji')
, która jeśli nie ma takiej opcji zwraca FALSE. Po sprawdzeniu dostępności opcji wykorzystamy funkcję add_option( $option, $value, $deprecated, $autoload )
, która pobiera cztery parametry:
Uzupełnimy teraz kod naszej funkcji aktywacji
function mtw_activation() { if (!get_option('mtw_opcja')) { add_option('mtw_opcja', 'tekst', '', 'no'); //ustawiam domyślny tekst } }
Nasza aktywacja jest już gotowa teraz przydałoby się jakoś wyświetlić tą opcję. Teraz więc uzupełnimy funkcję wyświetlającą nasz formularz. Tym razem wykorzystamy kilka klas stylów występujących w standardzie panelu wordpressa, które szerzej zostaną omówione później.
Na początek sprawdzimy czy został wysłany tekst dla naszej opcji za pomocą metody POST. Jeśli istnieje odpowiedni index w tablicy $_POST to czyścimy tę wartość a następnie aktualizujemy naszą opcję i tworzymy zmienną komunikat (w tym przypadku jest tylko jeden możliwy komunikat więc po prostu tworzę zmienną, jeśli miałoby ich być więcej dobrym rozwiązaniem byłoby zapisanie ich w tablicy).
Następnie pobieram naszą opcję (ponieważ jest dodawana w momencie aktywacji wtyczki, nie ma możliwości aby jej nie było) i rozpoczynam kod HTML. Całość biorę w pojemnik z klasą „warp”. Następnie wyświetlam nagłówek z nazwą naszej wtyczki. Kolejnym elementem jest pojemnik o klasie „row”, który rozciąga się na całą szerokość. Sprawdzam czy istnieje komunikat i jeśli tak to wyświetlam go w standardowym polu komunikatu dla powodzenia.
Następnie wyświetlam formularz zawierający jedno pole tekstowe z naszym tekstem oraz przycisk zatwierdzający zmiany.
function glowna_moja_trzecia_wtyczka() { if(isset($_POST['mtw_opcja'])) { $opcja = esc_sql( $_POST['mtw_opcja']); update_option( 'mtw_opcja', $opcja, 'no'); $komunikat = 'Zaktualizowano opcję.'; } $opcja = get_option('mtw_opcja'); ?> <div class="warp"> <h2>Trzecia wtyczka</h2> <div class="row"> <?= isset($komunikat) ? '<div id="message" class="updated">' . $komunikat . '</div>' : '';?> </div> <div class="row"> <form method="POST"> <label> Opcja<br> <input type="text" name="mtw_opcja" value="<?= $opcja; ?>"/> </label> <input type="submit" value="Aktualizuj" class="button-primary"/> </form> </div> </div> <?php }
No i mamy część główną naszej wtyczki, teraz przejdziemy do dezaktywacji.
Dezaktywacja niewiele różni się od aktywacji. Tym razem do „zaczepienia” funkcji dezaktywacji wykorzystamy funkcję register_deactivation_hook($file, $function)
, parametry tej funkcji są analogiczne jak przy aktywacji.
register_deactivation_hook(__FILE__, 'mtw_deactivation' ); function mtw_deactivation() { //kod dezaktywacji }
Założyliśmy że odwrócimy tekst zapisany w naszej opcji a więc w funkcji dezaktywacji pobieramy opcję, odwracamy zapisany w niej tekst i aktualizujemy.
function mtw_deactivation() { $opcja = get_option('mtw_opcja'); $opcja = strrev($opcja); update_option('mtw_opcja', $opcja); }
Pozostała nam jeszcze funkcja odinstalowania wtyczki.
Do odinstalowania wtyczki możemy wykorzystać dwie metody. Pierwszą z nich jest wykorzystanie funkcji register_uninstall_hook($file, $function)
i ta metoda jest całkowicie analogiczna do aktywacji i dezaktywacji. Bardziej preferowaną metodą jest umieszczenie w katalogu wtyczki pliku uninstall.php i tak właśnie zrobimy w naszym przykładzie.
Tak więc zaczniemy od utworzenia pliku uninstall.php i umieszczenia go w katalogu wtyczki. Następnie sprawdzimy czy plik został wywołany przez wordpressa i jeśli nie to zakończymy prace a jeśli tak to przejdziemy dalej. WordPress zapyta użytkownika czy chce usunąć opcję i pliki, jeśli się zgodzi to usuniemy a jeśli nie zostawimy. Do dzieła.
Zawartość pliku uninstall.php
<?php if( !defined( 'WP_UNINSTALL_PLUGIN' )) exit(); delete_option( 'mtw_opcja');
No i to był ostatni element naszej trzeciej wtyczki. Poniżej znajduje się pełny kod pliku głównego naszej wtyczki moja_trzecia_wtyczka.php
<?php /** Plugin Name: Moja trzecia wtyczka Version: 1.0 Description: Wtyczka z własną opcją Author: Daniel Kuczewski Author URI: http://zaawansowanywordpress.pl Plugin URI: http://zaawansowanywordpress.pl/3-aktywacja-dezaktywacja-opcje/ */ add_action('admin_menu', 'mtw_add_menu'); function mtw_add_menu() { add_menu_page('Strona główna wtyczki', 'Moja trzecia wtyczka', 'administrator', 'moja-trzecia-wtyczka', 'glowna_moja_trzecia_wtyczka', '', 100); } function glowna_moja_trzecia_wtyczka() { if(isset($_POST['mtw_opcja'])) { $opcja = esc_sql( $_POST['mtw_opcja']); update_option( 'mtw_opcja', $opcja, 'no'); $komunikat = 'Zaktualizowano opcję.'; } $opcja = get_option('mtw_opcja'); ?> <div class="warp"> <h2>Trzecia wtyczka</h2> <div class="row"> <?= isset($komunikat) ? '<div id="message" class="updated">' . $komunikat . '</div>' : '';?> </div> <div class="row"> <form method="POST"> <label> Opcja<br> <input type="text" name="mtw_opcja" value="<?= $opcja; ?>"/> </label> <input type="submit" value="Aktualizuj" class="button-primary"/> </form> </div> </div> <?php } register_activation_hook(__FILE__, 'mtw_activation'); function mtw_activation() { if (!get_option('mtw_opcja')) { add_option('mtw_opcja', 'tekst', '', 'no'); //ustawiam domyślny tekst } } register_deactivation_hook(__FILE__, 'mtw_deactivation'); function mtw_deactivation() { $opcja = get_option('mtw_opcja'); $opcja = strrev($opcja); update_option('mtw_opcja', $opcja, 'no'); }
Jeszcze wypadałoby przeprowadzić pewne testy
Na początku wrzucamy folder z naszą wtyczką zawierający pliki moja_trzecia_wtyczka.php oraz uninstall.php do katalogu z plugins. Wchodzimy w panelu administratora we „Wtyczki”, gdzie powinna już czekać moja_trzecia_wtyczka.
Po kliknięciu odnośnika „Włącz” powinna zadziałać nasza funkcja aktywacji wtyczki i dodać opcję z domyślnym tekstem. W menu lewym panelu administratora na dole powinna pojawić się nasza wtyczka. Wchodzimy w „Moja trzecia wtyczka”.
Powinien ukazać się standardowo ostylowany formularz. Widzimy w polu domyślny tekst, teraz wracamy do wtyczek i klikamy najpierw wyłącz (w tym momencie powinna zadziałać funkcja dezaktywacji, odwracająca tekst). Następnie klikamy z powrotem „włącz” co powinno spowodować jedynie włączenie wtyczki (nasza opcja już istnieje). Wracamy z powrotem do wtyczki, zmieniamy tekst i aktualizujemy.
Po powrocie do wtyczki nasz domyślny tekst powinien być już odwrócony. Dopisujemy cokolwiek i po kliknięciu „Aktualizuj” powinien pojawić się odpowiedni komunikat. Od teraz jeśli tam wejdziemy będzie się już pokazywał zaktualizowany tekst. Teraz pozostaje już tylko przetestować usuwanie wtyczki. Przechodzimy z powrotem do wtyczek i najpierw wyłączamy a następnie usuwamy wtyczkę. W momencie usunięcia, WordPress powinien zapytać nas jeszcze czy jesteśmy pewni usunięcia danych i plików.
Jeśli klikniemy „Nie, …” po prostu wrócimy do listy wtyczek i nic się nie wydarzy jednak jeśli potwierdzimy nasz wybór zostanie wykonany kod z pliku uninstall.php oraz usunięte zostaną wszystkie pliki wtyczki. (przed przetestowaniem tej opcji lepiej zrobić kopię).
No i to wszystko w tej części pliki wtyczki można pobrać tutaj -> moja_trzecia_wtyczka