Jak stworzyć swoją wtyczkę do WordPressa? – Szkielet pluginu

Jak już prawdopodobnie wiesz, wtyczki (z angielskiego pluginy) pozwalają na dodanie kolejnych funkcjonalności do Twojej instancji WordPress. Na pierwszy ogień bierzemy szkielet pluginu, czyli:

  • folder i główny plik wtyczki, a konkretnie ich nazwy,
  • nagłówek – czyli wszelkie niezbędne informacje na temat autora, wersji, opis i inne, które są wyświetlane w panelu WP,
  • podstawowe hooki, które pozwolą włączyć i wyłączyć wtyczkę,
  • odinstalowanie wtyczki za pomocą hook’a i pliku uninstall.

Nazwa wtyczki jej folderu i pliku

Pierwszym krokiem jest utworzenie folderu, w którym umieścimy pliki z kodem naszej wtyczki. W tym celu musimy udać się do folderu /wp-content/plugins/, a w nim utworzyć folder z unikalną nazwą naszej wtyczki.

Dobrym zwyczajem jest utworzenie unikalnej nazwy, z Twoim autorskim przedrostkiem. Wszystko po to, by w momencie udostępnienia wtyczki w repozytorium, użytkownik nie narobił sobie problemów, pobierając Twoją wtyczkę, która nadpisze pliki innej wtyczki.

Gdy utworzyłeś już folder na swój plugin, to musisz utworzyć w nim plik, którego nazwa jest identyczna jak nazwa folderu, ale z rozszerzeniem .php. Na przykład tworzymy folder towp-first, a w nim plik towp-first.php. W efekcie otrzymujemy taką ścieżkę do naszego pliku: /wp-content/plugins/towp-first/towp-first.php.

Spokojnie, nazwa plików nie jest brana pod uwagę przy nazewnictwie Twojego pluginu, który będzie się wyświetlać w panelu CMS. Zobaczmy, co za to odpowiada.

Nagłówek wtyczki – informacje o autorze, opis, licencja i wymogi

Nagłówek pluginu informuje WordPressa, jaką nazwę ma nasza wtyczka, jaki jest jej opis, jakie autor postawił wymogi odnośnie wersji WordPress czy PHP. Służy do tego składnia PHPDoc, która jest adaptacją Javadoc dla języka PHP – jej podstawowym celem jest dokumentowanie aplikacji napisanej w tym języku programowania.

Podstawowa składnia, wymagana do wyświetlania wtyczki na liście w panelu CMS to tylko nazwa i wygląda następująco:

/**
 * Plugin Name: Ten od WordPressa
 */

Pełne informacje na temat wtyczki, autorów, licencji, adresu aktualizacji i inne zawrzemy w taki sposób:

/**
 * Plugin Name:       Ten od WordPressa - First
 * Plugin URI:        https://tenodwordpressa.pl/first
 * Description:       Podstawy tworzenia wtyczek.
 * Version:           1.0.0
 * Requires at least: 5.2
 * Requires PHP:      7.4
 * Author:            Ten od WordPressa
 * Author URI:        https://tenodwordpressa.pl/
 * License:           GPL v2 or later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Update URI:        https://tenodwordpressa.pl/first
 * Text Domain:       ten-od-wp
 * Domain Path:       /tenodwp
 */

Pełne znaczenie poszczególnych wierszy znajdziesz w oficjalnej dokumentacji twórców (developer.wordpress.org), jednakże większość z nich jest dość intuicyjna.

Podstawowe hooki potrzebne do włączenia wtyczki

By włączyć lub wyłączyć nasz plugin wymagane są funkcje połączone z dwiema kotwicami (z ang. hook):

  • activation_hook – kotwica odpowiedzialna za wszelkie działania związane z uruchomieniem wtyczki.
  • deactviation_hook – kotwica odpowiedzialna za wszelkie działania związane z wyłączeniem wtyczki.

Pierwszym krokiem jest zdefiniowanie tego, co ma robić nasza wtyczka w momencie włączenia np.: tworzenie tabeli, utworzenie taksonomii, dodanie opcji do tabeli options lub jakieś inne działanie. W tym celu przygotowujemy funkcję, która zawiera określone działanie, a następnie łączymy ją z danym hookiem.

function towp_setup_post_type() {
    // Rejestracja własnego typu postów "portfolio"
    register_post_type( 'portfolio', ['public' => true ] ); 
} 
add_action( 'init', 'towp_setup_post_type' );
 
 
/**
 * Aktywacja pluginu
 */
function towp_activate() { 
    // Wykonanie wcześniej zdefiniowanej funkcji.
    towp_setup_post_type(); 
    // Zresetowanie permalinków.
    flush_rewrite_rules(); 
}
// Podłączenie funkcji aktywacyjnej do hooka
register_activation_hook( __FILE__, 'towp_activate' );

Natomiast, by wyłączyć wtyczkę, musimy odwrócić działanie funkcji aktywacyjnej i cofnąć wprowadzone zmiany, w tym celu definiujemy kolejną funkcję, która to za nas wykona i podłączamy ją do kotwicy dezaktywującej plugin.

/**
 * Dezaktywacja pluginu
 */
function towp_deactivate() {
    // Wyrejestrowanie dodanego typu postów "portfolio".
    unregister_post_type( 'portfolio' );
    // Zresetowanie permalinków
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'towp_deactivate' );

Odinstalowanie wtyczki za pomocą kotwicy i pliku

Usuwanie wtyczki powinno być odróżnione od jej wyłączenia. My na tak wczesnym etapie tego nie zrobiliśmy, ale warto podać przykład takiego rozróżnienia:

  • działania wykonywane w ramach wyłączenia wtyczki: wyczyszczenie cache, zresetowanie permalinków, wyrejestrowanie typu wpisów.
  • działania wykonywane w ramach usunięcia wtyczki: usunięcie utworzonej tabeli, usunięcie dodanych danych do tabeli options.

By odinstalować naszą wtyczkę, możemy wykorzystać dwie metody.

  • za pomocą kotwicy uninstall_hook poprzez zdefiniowanie funkcji, która podłączymy do hooka,
  • za pomocą pliku uninstall.php, który tworzymy w folderze z pluginem.

Pamiętaj, by nie testować usuwania, bez wcześniejszego utworzenia kopii Twoich plików, bo je stracisz!

Ten od WordPressa – który się zdziwił gdy wszystko zniknęło…

Pierwsza opcja jest Ci już znana z poprzednich etapów:

function towp_uninstall(){
// kod naszej funkcji
}
register_uninstall_hook(__FILE__, 'towp_uninstall');

Druga opcja to utworzenie pliku uninstall.php i zamieszczenie konkretnych działań, które się wykonają po przejściu do niego (należy pamiętać o zabezpieczeniu pliku przed usunięciem bez kliknięcia przycisk „usuń” z panelu CMS):

// zabezpieczenie przed wywołaniem innym niż przez WordPress
if (!defined('WP_UNINSTALL_PLUGIN')) {
    die;
}
$option_name = 'towp_option';
delete_option($option_name);
 
// usunięcie przykładowej tabeli
global $wpdb;
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}towp");

Złożoność wtyczek

Tworzenie wtyczek do WordPressa to proces, który może mieć różne stopnie złożoności, w zależności od tego, jakie funkcjonalności planujesz zaimplementować.

Na jednym końcu spektrum mamy proste wtyczki. Mogą one dodawać drobne funkcjonalności do twojego serwisu, takie jak dodawanie niestandardowych widgetów, tworzenie formularzy kontaktowych czy umożliwianie edycji tekstu na stronie. Na przykład, możesz stworzyć wtyczkę, która dodaje przycisk umożliwiający udostępnienie treści na social media. Takie wtyczki zwykle wymagają mniejszej ilości kodu i są łatwiejsze do stworzenia.

Na drugim końcu spektrum mamy wtyczki o dużej złożoności, które wprowadzają zupełnie nowe funkcjonalności do Twojej strony internetowej. Przykładowo, wtyczki e-commerce, takie jak WooCommerce, transformują zwykłe strony WordPressa w pełnowartościowe sklepy internetowe. Takie wtyczki często wymagają zrozumienia bardziej zaawansowanych aspektów programowania i architektury WordPressa.

Niezależnie od złożoności wtyczki, najważniejsze jest to, aby zrozumieć potrzeby swojej strony i jej użytkowników. To pomoże Ci zaprojektować i zbudować wtyczkę, która będzie dobrze służyć swojemu celowi.

Bezpieczeństwo wtyczek

Bezpieczeństwo w internecie jest niezwykle istotne, a Twoje wtyczki WordPress nie są wyjątkiem. Przy tworzeniu wtyczki powinieneś mieć na uwadze kilka kluczowych zasad bezpieczeństwa.

Po pierwsze, zawsze należy zabezpieczyć swoje wtyczki przed atakami SQL Injection. To rodzaj ataku, który manipuluje zapytaniami SQL w celu uzyskania nieautoryzowanego dostępu do bazy danych. Aby zapobiec temu, zawsze należy sanitizować (oczyszczać) dane wejściowe, zanim użyjemy ich w zapytaniu SQL. WordPress oferuje różne funkcje do sanitizacji danych, takie jak sanitize_text_field(), które możesz wykorzystać.

Drugą zasadą jest ochrona przed atakami Cross-Site Scripting (XSS). Ataki te polegają na wstrzyknięciu złośliwego kodu JavaScript do strony, który zostanie wykonany przez przeglądarkę użytkownika. Wprowadzanie danych powinno być zawsze odpowiednio escapowane (zabezpieczane) przed wyświetleniem ich na stronie. WordPress zapewnia funkcje takie jak esc_html() do tego celu.

Ostatnim, ale nie mniej ważnym aspektem jest zasada minimalnych uprawnień. Każdy użytkownik lub proces na Twojej stronie powinien mieć tylko te uprawnienia, które są mu absolutnie niezbędne do wykonania swoich zadań. Przykładowo, jeśli Twoja wtyczka potrzebuje tylko odczytać dane z bazy danych, nie powinna mieć uprawnień do ich zapisywania.

Pamiętaj, że bezpieczeństwo to proces, a nie jeden konkretny krok. Zawsze bądź na bieżąco z najnowszymi praktykami i aktualizacjami bezpieczeństwa.

Testowanie swoich wtyczek

Tworzenie wtyczek to nie tylko kodowanie. Równie ważne, jeśli nie ważniejsze, jest odpowiednie testowanie wtyczki przed jej opublikowaniem lub zaktualizowaniem. Testy pomogą Ci zapewnić, że Twoja wtyczka działa prawidłowo i nie powoduje problemów z innymi elementami Twojej strony.

Testy jednostkowe to jedna z form testowania, która polega na sprawdzeniu, czy poszczególne „jednostki” Twojego kodu (na przykład funkcje lub metody) działają tak, jak powinny. WordPress wspiera testy jednostkowe poprzez bibliotekę PHPUnit.

Testy integracyjne to kolejny rodzaj testowania, który sprawdza, jak różne części Twojej wtyczki współpracują ze sobą. Jest to szczególnie ważne, gdy Twoja wtyczka interaktywuje z innymi elementami systemu, takimi jak baza danych lub inne wtyczki.

Testy akceptacji użytkownika, znane też jako testy behawioralne, koncentrują się na tym, jak wtyczka działa z perspektywy użytkownika. Te testy pomagają zapewnić, że Twoja wtyczka nie tylko działa poprawnie, ale jest również łatwa i przyjemna w użyciu.

Aktualizowanie Twojej wtyczki

Wydawanie aktualizacji swojej wtyczki jest kluczowym elementem jej utrzymania. Regularne aktualizacje nie tylko pozwalają na poprawę błędów i dodawanie nowych funkcji, ale także zapewniają kompatybilność z najnowszymi wersjami WordPressa.

Wydając aktualizację, warto pamiętać o kilku ważnych zasadach:

  1. Kompatybilność: Przed wydaniem aktualizacji upewnij się, że Twoja wtyczka jest kompatybilna z najnowszą wersją WordPressa, a także z poprzednimi wersjami, których mogą używać Twoi użytkownicy. Dzięki temu zminimalizujesz ryzyko problemów z funkcjonowaniem wtyczki po aktualizacji.
  2. Testowanie: Przeprowadź pełne testy swojej wtyczki po wprowadzeniu zmian. Upewnij się, że wszystko działa tak, jak powinno, zanim udostępnisz aktualizację swoim użytkownikom. Pamiętaj, że testy powinny obejmować różne scenariusze użycia i konfiguracje.
  3. Komunikacja: Poinformuj swoich użytkowników o aktualizacji, wyjaśniając, jakie zmiany wprowadzasz i dlaczego są one ważne. Dzięki temu Twoi użytkownicy będą lepiej zrozumieć, jak wpłynie to na ich korzystanie z wtyczki.
  4. Wsparcie: Po wydaniu aktualizacji bądź gotowy na świadczenie wsparcia swoim użytkownikom. Mogą pojawić się pytania lub problemy, na które będziesz musiał szybko i skutecznie odpowiedzieć.
  5. Iteracja: Na podstawie informacji zwrotnych od użytkowników, a także własnych obserwacji, planuj i wprowadzaj kolejne aktualizacje. Proces ten jest ciągły i pozwala na ciągłe doskonalenie Twojej wtyczki.

Pamiętaj, że udostępnianie regularnych aktualizacji to znak dla Twoich użytkowników, że stale pracujesz nad swoją wtyczką i dbasz o jej jakość.

Dodatkowe zasoby do nauki

Chcesz dowiedzieć się więcej o tworzeniu wtyczek WordPress? Poniżej przedstawiamy kilka dodatkowych zasobów, które mogą pomóc Ci poszerzyć swoją wiedzę:

Podsumowanie

Jeśli wykonałeś wszystkie kroki, tak jak je opisałem to Twoja wtyczka powinna być wyświetlana na liście w WP, może być włączana i wyłączana. Jednakże pamiętaj, że jej usunięcie spowoduje, że opracowane przez Ciebie pliki znikną. W kolejnych wpisach zbudujemy już działający plugin, który dodaje pewne funkcjonalności do WordPress!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *