Przewodnik po rozpoczęciu pracy przy tworzeniu pluginów dla WordPressa
Dodatki do WordPress są kluczowym elementem, który umożliwia rozszerzenie funkcjonalności platformy. Dzięki nim programiści mogą dodawać nowe funkcje lub modyfikować zachowanie witryny bez konieczności edycji kodu źródłowego WordPress. Od prostych narzędzi do obsługi krótkich kodów po złożone systemy e-commerce – wszystko to można zrealizować za pomocą dodatków. Zrozumienie sposobu działania dodatków to pierwszy krok każdego programisty pracującego z WordPress.
Aplikacja rozszerzająca (plugin) dla WordPressa to w istocie jeden lub kilka plików w formacie PHP, zawierających kod zgodny z standardami kodowania WordPressa. Te pliki są umieszczone w określonym katalogu i interagują z core’em WordPressa za pośrednictwem API aplikacji rozszerzających. Aby tworzyć takie aplikacje, niezbędne są znajomości języka PHP, a także zapoznanie z ogromną biblioteką funkcji dostępnych w WordPressie, systemem hooków oraz zasadami obsługi bazy danych.
Stworz swoj pierwszy plik z rozszerzeniem (plugin).
Każdy plugin WordPress wymaga pliku głównego, który stanowi punkt wejścia do pluginu. Ten plik zawiera metadane pluginu oraz jest odpowiedzialny za inicjalizację jego podstawowych funkcji.
Polecamy lekturę. Kompletny przewodnik po tworzeniu wtyczek do WordPressa: od podstaw do publikacji w sklepie.。
Struktura głównego pliku wtyczki
Podstawą pluginu jest plik główny, który zwykle nosi nazwę pluginu. my-first-plugin.phpKomentarze umieszczone na początku tego pliku są niezbyt ważne, ale odgrywają kluczową rolę, gdyż przekazują WordPress informacje o identyfikacji pluginu. Najprostszzy przykład komentarza umieszczonego na początku pliku głównego wygląda następująco:
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ W tym komentarzu pola “Plugin Name” jest obowiązkowe – WordPress używa go do identyfikacji i wyświetlania twojego pluginu w interfejsie administracyjnym. Pozostałe informacje, takie jak wersja pluginu i opis, pomagają użytkownikom lepiej go zrozumieć.
Po określeniu informacji o pluginie zwykle zaczynamy dodawać kod realizujący jego funkcje. Na przykład, najprostszą funkcją może być dodanie linii tekstu według ustawień na dole strony internetowej. To można zrealizować za pomocą… wp_footer Tę funkcję realizuje „hook akcji” (Action Hook).
Implementuj funkcję realizującą prostą funkcję.
Poniżej znajduje się przykład pełnego pliku zawierającego plugin, który umożliwia dodawanie tekstu na dno strony:
<?php
/**
* Plugin Name: 页脚问候插件
*/
// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* 在网站页脚输出一条自定义问候语
*/
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">Dziękujemy, że odwiedziłeś naszą stronę internetową!</p>';
}
// 将函数挂载到`wp_footer`钩子上
add_action( 'wp_footer', 'myplugin_add_footer_text' ); W tym kodzie:myplugin_add_footer_text To funkcja, którą sami definiowaliśmy; ona wykonywa konkretne operacje wyświetlania.add_action() To funkcja dostępna w WordPress, która umożliwia “przyczepienie” naszych własnych funkcji do core’u WordPress. wp_footer W tym momencie nasza funkcja zostanie automatycznie wywołana podczas każdej aktualizacji strony w WordPressie, gdy program dotrze do sekcji nagłówka (header).
Polecamy lekturę. Od poznania podstaw do osiągnięcia biegłości: Pełny przewodnik i praktyczne kursy rozwoju pluginów dla WordPress。
Zrozumienie mechanizmu „hooków” w WordPressie
Hooki stanowią istotę i „dušę” rozwoju pluginów dla WordPressa, umożliwiając modyfikację lub rozszerzenie standardowych funkcji tego systemu. Istnieją dwa głównego typy hooków: hooki akcji (Action Hooks) i hooki filtrów (Filter Hooks).
Zastosowanie aktywnych háków (action hooks)
Aktywnie działające „haki” (ang. action hooks) umożliwiają wykonywanie własnego kodu w określonych momencach czasu lub w momencie wydarzenia. Na przykład, gdy publikuje się artykuł…publish_post) albo w momencie logowania użytkownika.wp_login(Nie używaj więcej niż dwóch kolorów). Użyj add_action() Funkcja umożliwia przypisanie Twojej funkcji obsługiwania wywołania (callback function) do określonego „haka akcji” (action hook).
Poniższe przykłady pokazują, jak automatycznie dodawać oświadczenie o prawach autorskich po treści artykułu:
function myplugin_add_post_copyright( $content ) {
if ( is_single() ) {
$copyright = '<div class="post-copyright"><p>Ten tekst jest oryginalnym materiałem; przy jego reprodukcji konieczne jest podanie źródła.</p></div>';
$content .= $copyright;
}
return $content;
}
add_filter( 'the_content', 'myplugin_add_post_copyright' ); Zwróć uwagę, że tutaj użyliśmy… add_filter() a nie add_action()Ponieważ modyfikacja treści artykułu należy do działań typu “filtrowania”, to otwiera drogę dla jeszcze jednego istotnego elementu („hooka”).
Funkcja hooków filtrów
Hooki filtrów umożliwiają modyfikację danych przekazywanych w trakcie procesu. Różnica pomiędzy nimi a hookami działań polega na tym, że funkcje filtrów muszą zwrócić jakąś wartość (zwykle zmodyfikowaną wartość wejściową). Na przykład:the_content Filtry umożliwiają modyfikację treści artykułów, które są przygotowywane do publikacji., the_title Możesz zmienić nagłówek artykułu.
Poniższe przykłady pokazują, jak używać filtrów do modyfikacji długości wyjęć z artykułów:
Polecamy lekturę. Przewodnik po rozwoju pluginów dla WordPress: jak stworzyć swój pierwszy własny plugin od zera。
function myplugin_custom_excerpt_length( $length ) {
// 将默认的55个词改为20个词
return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' ); W tym przykładzie nasza funkcja… myplugin_custom_excerpt_length Otrzymano standardową wartość długości wydruku tekstu i zwrócono nam nową, ustawioną przez nas wartość. WordPress następnie użyje tej nowej wartości do generowania wydruku tekstu.
Internacjonalizacja wtyczek oraz pola tekstowe
Aby twoje wtyczki były dostępne dla użytkowników z całego świata, internacionalizacja (i18n) jest niezbędnym krokiem. WordPress oferuje kompletną gamę funkcji umożliwiających tłumaczenie wtyczek na różne języki.
Polie tekstowe do ładowania tekstów wtyczek
Pierwszy krok w procesie internacionalizacji polega na poprawnym ustawieniu pola tekstowego (Text Domain) w pluginie oraz na nałożeniu plików tłumaczeń w odpowiednim momencie. Pole tekstowe musi być identyczne z “Text Domain” zdefiniowanym w komentarzach na początku głównego pliku pluginu.
Zwykle używamy tego w momencie inicjalizacji wtyczki. load_plugin_textdomain Funkcja służy do ładowania tłumaczeń. Standardowym sposobem jest umieszczenie następującego kodu w głównym pliku:
function myplugin_load_textdomain() {
load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'myplugin_load_textdomain' ); Ten kod definiuje funkcję. myplugin_load_textdomainI użyj… add_action Zainstaluj to na… plugins_loaded Na haczu. To zapewnia, że pliki z tłumaczeniami zostaną załadowane przed uruchomieniem kodu funkcjonalnego wtyczki. Trzeci parametr wskazuje ścieżkę, na której znajdują się pliki językowe (.mo), zwykle w katalogu zawierającym tę wtyczkę. languages W folderze.
Użyj funkcji tłumaczeniowej, aby otoczyć tekst stringiem.
W kodzie pluginu wszystkie teksty przeznaczone dla użytkowników, które wymagają tłumaczenia, muszą być umieszczone w specjalnych funkcjach. Dwie najczęściej używane funkcje to: __() 和 _e()。
__() Funkcja powraca przetłumaczony tekst. _e() Funkcja po prostu wyświetla swoje wyniki (za pomocą instrukcji `echo`). W przykładzie z dodawaniem tekstu do nagłówka strony powinniśmy to zrobić w taki sposób, aby był możliwy przekład:
function myplugin_add_footer_text() {
$text = __( '感谢您访问本网站!', 'my-first-plugin' );
echo '<p style="text-align:center;">'`. esc_html($text).`'</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); W tym miejscu tekst “Dziękujemy za odwiedziny naszej strony internetowej!” jest… __() Funkcja została umieszczone w „opakowanie” (ang. function wrapping), a także zdefiniowano obszar tekstowy (ang. text field). my-first-pluginTłumacze mogą tworzyć pliki z tłumaczeniami tego tekstu w różnych językach. Ponadto używamy… esc_html() Funkcje wykonywają escapeowanie wyświetlanych danych – to istotna praktyka bezpieczeństwa.
Bezpieczeństwo wtyczek oraz najlepsze praktyki ich stosowania
Aby stworzyć popularny plugin, bezpieczeństwo oraz jakość kodu muszą być równie ważne jak same funkcje. Dodawanie najlepszych praktyk rozwoju zapewni ochronę witryn użytkowników, a także zwiększy poważność i łatwość konserwacji pluginu.
Weryfikacja danych, escape oraz ich przygotowanie (czyli usunięcie niepotrzebnych znaków i ulepszenie ich formatu)
Nigdy nie ufajdanie danych pochodzących od użytkowników lub z zewnętrznych źródeł. Przed obróbką jakichkolwiek danych wejściowych (np. $_GET, $_POST, $_COOKIE) oraz przed wysłaniem danych do przeglądarza lub bazy danych konieczne jest przeprowadzenie odpowiednich kontroli.
Dla danych wyświetlanych na stronie HTML należy używać funkcji escape w WordPress. esc_html(), esc_attr(), esc_url()Dla danych, które są właśnie przygotowywane do zapisu do bazy danych, należy użyć… wp_strip_all_tags() 或 sanitize_text_field() Wykonaj czyszczenie. Poniższy przykład pokazuje bezpieczny sposób obsługi wpisów z formularza:
// 假设我们接收一个名为`user_bio`的POST字段
$raw_bio = $_POST['user_bio'] ?? ''; // 使用空合并运算符提供默认值
// 清理数据:移除标签,清理额外空格和特殊字符
$clean_bio = sanitize_textarea_field( $raw_bio );
// 在存入数据库前,还可以使用`wp_kses_post`允许安全的HTML标签
$safe_bio_for_db = wp_kses_post( $clean_bio );
// 现在$safe_bio_for_db可以安全地存入数据库了 Używanie metod innych niż te bazujące na kontroli uprawnień („CE”)
Jeśli twoje wtyczka posiada interfejs administracyjny lub obsługuje wysyłanie formularzy, konieczne jest używanie mechanizmu „nonce” w WordPress, aby zapobiec atakom typu CSRF (Cross-Site Request Forgery). Ponadto należy wdrożyć kontrole upoważnień (Capability Checks), aby upewnić się, że aktualny użytkownik ma dostęp do wykonywanych operacji.
Podczas tworzenia menu zarządzania lub formularza należy stworzyć pole, które nie jest typu „ce”.
// 在表单中输出一个非ce字段
wp_nonce_field( 'myplugin_save_action', 'myplugin_nonce_field' ); Podczas obsługi wysyłania formularzy należy sprawdzić, czy wartość pola nie jest równa „ce”.
// 验证非ce
if ( ! isset( $_POST['myplugin_nonce_field'] ) || ! wp_verify_nonce( $_POST['myplugin_nonce_field'], 'myplugin_save_action' ) ) {
wp_die( __( '安全校验失败,操作已终止。', 'my-first-plugin' ) );
}
// 检查用户权限(例如,检查是否有`manage_options`权限)
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __( '您没有执行此操作的权限。', 'my-first-plugin' ) );
}
// 通过所有安全检查,开始处理数据... Posłuchanie tych zasad bezpieczeństwa stanowi podstawę dla stworzenia zaufanego dodatku.
Podsumowanie.
Rozwoj pluginów dla WordPress polega na przekształceniu kreatywnych idei w funkcjonalne rozwiązania, a to wymaga głębokiego zrozumienia podstawowej architektury platformy. Proces rozpoczyna się od stworzenia głównego pliku zawierającego poprawne informacje o nagłówkach (header comments). Kluczowym elementem w tym procesie jest opanowanie różnic i zastosowań aktywnych hooków (action hooks) oraz filtrów hooków (filter hooks), które umożliwiają rozszerzanie funkcjonalności pluginu. Poprzez internacionalizację można sprawić, aby twój plugin był dostępny dla użytkowników z całego świata. Bezpieczeństwo pluginu stanowi kluczową podstawę dla jego stabilności i zaufania użytkowników – istotne są procedury sprawdzania danych, ich escapeowania, czyszczenia, a także kontroli uprawień. Dodając do tego stosowanie najlepszych praktyk, będziesz w stanie stworzyć plugin wydajny, bezpieczny i łatwy w obsłudze.
FAQ – najczęściej zadawane pytania.
Jaki minimalny liczba plików jest wymagany do działania wtyczki (pluginu) dla WordPress?
Najprostszzy plugin do WordPressa może składać się z jednego tylko pliku w formacie PHP. Ten plik musi zawierać standardowe komentarze opisujące strukturę pluginu (np. nazwę pluginu) oraz kod realizujący jego funkcje. Gdy funkcje pluginu stają się bardziej złożone, zwykle rozdzielają się na kilka plików, do których dodaje się również CSS, JavaScript, zdjęcia oraz pliki z tłumaczeniami tekstów w różnych językach.
Czy powinienem napisać kod pluginu bezpośrednio do pliku functions.php w temacie?
Kod, który dotyczy wyłącznie aktualnego tematu i jest ściśle powiązany z jego funkcjonalnościami, może zostać umieszczony w obrębie tego tematu.functions.phpTak. Jednak w przypadku funkcji, które mają zastosowanie w wielu różnych tematach i są uniwersalne, zdecydowanie zaleca się rozwijać je jako odrębne pluginy. Plusem pluginów jest to, że są niezależne od konkretnego tematu – dlatego nie giną po zmianie tematu, a także ułatwiają się ich zarządzanie i dystrybucja.
Jak stworzyć stronę z ustawieniami dla mojego dodatku?
Możesz używać funkcji dostępnych w WordPress, aby dodać menu administracyjne oraz strony. Najczęściej wykorzystywane są funkcje z modułów typu „Plugins”. add_menu_page() 或 add_options_page() Musisz stworzyć funkcję typu callback, która będzie wyświetlać zawartość HTML strony oraz obsługiwać wysyłanie formularzy (wliczając sprawdzenie poprawności danych i upoważnień użytkownika). Proces ten często wymaga użycia API do konfiguracji WordPress (Settings API), które umożliwia bardziej standardowe i bezpieczne tworzenie oraz zarządzanie opcjami konfiguracji.
Jak debugować i dokumentować błędy podczas tworzenia wtyczek (pluginów)?
Najpierw upewnij się, że w środowisku rozwoju wszystko jest w porządku.wp-config.phpWłączyć WP_DEBUG w pliku:define( 'WP_DEBUG', true );To wyświetli błędy i ostrzeżenia PHP na stronie. Do bardziej złożonego debugowania można użyć innych narzędzi.error_log()Funkcja zapisuje informacje do logu błędów na serwerze albo wykorzystuje mechanizmy dostępne w WordPress.wp_debugDodatkowe funkcje. Ponadto istnieje wiele wyjątkowych dodatków do debugowania dostępnych od stron trzecich, np. Query Monitor, które pomagają w analizie zapytań do bazy danych, hooków, skryptów itd. Są one doskonałymi pomocnikami przy tworzeniu dodatków.
Następny krok, co dalej?
Dalsze lektury i praktyczna wiedza.
Poniższe treści są powiązane z tematem tego artykułu i warto je przeczytać. Zwykle lepiej zacząć od artykułu, który najbardziej odpowiada aktualnemu problemowi, a potem stopniowo przechodzić do tematów pokrewnych.
- Jak wybrać i dostosować temat WordPress, który idealnie pasuje do twoich potrzeb?
- Przewodnik po tworzeniu pluginów dla WordPress: jak stworzyć swój pierwszy własny plugin od zera
- Jak stać się deweloperem pluginów dla WordPressa: pełny przewodnik od zera do jednego
- Od zera do jednego: Pełny przewodnik i praktyczne poradы na budowę profesjonalnych stron internetowych za pomocą WordPressa
- Od zera: Pełny proces rozwoju tematów dla WordPressa w erze nowoczesnej oraz najlepsze praktyki