Od zera: przygotowania i tworzenie środowiska pracy
Przed rozpoczęciem pisania pierwszego pluginu konieczne jest przygotowanie wszystkich niezbędnych elementów. To obejmuje zrozumienie podstawowej struktury pluginów WordPress, ustawienie bezpiecznego środowiska rozwoju lokalnego oraz pojęcie się kluczowych zasad rozwoju pluginów.
Typowy plugin dla WordPressa to program, który znajduje się w folderze plików pluginów w witrynie internetowej obsługiwaniej przez ten system. /wp-content/plugins/ W folderze znajduje się niezależny folder, w którym znajduje się główny plik PHP z określonym nagłówkiem. Ten plik nie tylko zawiera metadane o pluginie, ale także stanowi wejście do wszystkich funkcji tego pluginu. Można uruchomić plugin na dwa sposoby: albo poprzez kombinację proceduralnych funkcji, albo za pomocą struktury klas obiektowych. Drugi sposób jest wybierany częściej w dzisiejszym rozwoju pluginów ze względu na lepszą zabezpieczenie kodu i organizację jego struktury.
Środowisko lokalnego do rozwoju jest kluczowe dla efektywnego tworzenia oprogramowania. Zaleca się użyć narzędzi takich jak XAMPP, Local by Flywheel lub Docker, aby uruchomić środowisko integrujące Apache/Nginx, MySQL i PHP. Dzięki temu możesz swobodnie testować i debugować swoje aplikacje, bez wpływu na działanie witryny online.
Polecamy lekturę. Od zera: kompletny przewodnik po tworzeniu wtyczek do WordPressa oraz dzieleniu się najlepszymi praktykami.。
Stworzenie szkieletu pluginu: struktura i kluczowe pliki
W tym rozdziale zostanie szczegółowo opisane, jak od zera stworzyć najprostszą strukturę pluginu zgodną z wymaganiami WordPressa. Dobra struktura stanowi podstawę dla stabilnego, bezpiecznego i łatwego w utrzymaniu pluginu.
Tworzenie niezbędnych plików głównych pluginów
Życie pluginu rozpoczyna się od jednego głównego pliku. Nazwa tego pliku zwykle jest identyczna z nazwą foldera, w którym znajduje się plugin. Na przykład, jeśli nazwa foldera z pluginem to „my-plugin”, to nazwa pliku głównego będzie „my-plugin.js”. my-custom-pluginW takim przypadku plik główny może mieć nazwę… my-custom-plugin.phpNa samym początku tego pliku musisz użyć bloku komentarzy zgodnego z określonym formatem, aby opisać informacje o pluginie. To kluczowe, aby WordPress mógł go rozpoznać i wyświetlić w liście pluginów w panelu administracyjnym.
Poniżej znajduje się przykład najprostszego nagłówka pliku pluginu:
<?php
/**
* Plugin Name: 我的自定义功能模块
* Plugin URI: https://example.com/my-custom-plugin
* Description: 这是一个用于演示如何从零开始开发WordPress插件的示例模块。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-custom-plugin
* Domain Path: /languages
*/ W tym komentarzu pola “Plugin Name” jest obowiązkowe, natomiast pozostałe pola są opcjonalne, ale zaleca się je wypełnić. Pola “Text Domain” i “Domain Path” są używane do lokalizacji pluginu (tj. do przekładu jego treści na różne języki), aby ułatwić jego dostosowanie do potrzeb użytkowników posługujących się różnymi językami.
Pliki i katalogi organizujących pluginów
Wraz z rozszerzaniem funkcji dodatków (pluginów) nie jest zalecane skupiać cały kod w jednym głównym pliku. Dobrze zorganizowana struktura dodatków składa się z kilku podkatalogów i plików. Powszechna struktura może wyglądać następująco:
Polecamy lekturę. Kompletny przewodnik po tworzeniu wtyczek WordPress: praktyczny poradnik od podstaw do publikacji i uruchomienia.。
my-custom-plugin/
├── my-custom-plugin.php # 主插件文件(入口)
├── includes/ # 核心功能类文件目录
│ ├── class-core.php # 核心逻辑类
│ └── class-admin.php # 后台管理逻辑类
├── admin/ # 后台相关文件
│ ├── css/ # 后台样式表
│ ├── js/ # 后台JavaScript
│ └── partials/ # 后台模板片段
├── public/ # 前端相关文件
│ ├── css/
│ ├── js/
│ └── partials/
├── assets/ # 公共资源(如图标、图片)
├── languages/ # 国际化语言包(.po, .mo文件)
└── uninstall.php # 插件卸载清理脚本 在 my-custom-plugin.php W głównym pliku zwykle nie piszemy bezpośrednio logiki biznesowej, lecz używamy go jako “startera”, który zawiera niezbędne pliki i inicjluje klasy podstawowe.
// 防止直接文件访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 定义插件路径常量,方便在其他文件中引用
define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'MY_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
// 包含核心类文件
require_once MY_PLUGIN_PATH . 'includes/class-core.php';
require_once MY_PLUGIN_PATH . 'includes/class-admin.php';
// 初始化插件
function my_custom_plugin_init() {
$plugin_core = new My_Plugin_Core();
$plugin_admin = new My_Plugin_Admin();
// 执行初始化操作...
}
add_action( 'plugins_loaded', 'my_custom_plugin_init' ); Link do core’a WordPress: Hooki akcji i filtrów
System pluginów w WordPress jest tak potężny, ponieważ oferuje wiele punktów wydarzeń (event points), które umożliwiają programistom modyfikację lub ulepszenie zachowania pluginów bez konieczności edycji kodu źródłowego. Te mechanizmy nazywane są “hakami” (Hooks) i składają się głównie z działań (Actions) oraz filtrów (Filters). Są one mostem łączącym pluginy z core’em WordPress.
Zrozumienie i stosowanie „akcji-haków” (action hooks)
Aktywnie działające „haki” (ang. action hooks) umożliwiają wykonywanie własnego kodu w momencie wydarzenia określonego. Na przykład, gdy publikuje się artykuł, gdy użytkownik loguje się lub gdy otwiera się określona strona w panelu administracyjnym. add_action() Funkcje mogą być “przypięte” („zmontowane”) do tych „haków” („hooków”).
Jeśli chcesz automatycznie dodać oświadczenie o prawach autorskich na dnie artykułu, możesz to zrobić za pomocą odpowiednich narzędzi lub skryptów. the_content Ten „hook” do działań (w rzeczywistości jest to filtr, ale jego używanie przypomina funkcje typu „działanie”; w klasycznych przykładach używa się właśnie tego terminu). Lepszym przykładem działania byłoby wysłanie wiadomości powitalnej użytkownikowi po udałym ustawieniu konta:
// 这是一个动作钩子的使用示例
function my_plugin_send_welcome_email( $user_id ) {
$user = get_userdata( $user_id );
$to = $user->user_email;
$subject = '欢迎加入我们的网站!';
$message = '亲爱的' . $user->display_name . ',感谢您注册!';
wp_mail( $to, $subject, $message );
}
// 将函数挂载到`user_register`这个动作钩子上
add_action( 'user_register', 'my_plugin_send_welcome_email' ); Opanowanie sposobów używania filtrów
Hooki filtrów umożliwiają modyfikację danych. Gdy WordPress wykonywa określony proces, przechodzi dane przez serię filtrów, a twoje wtyczki (plug-iny) mogą je przyjąć, zmienić i następnie wysłać dalej. add_filter() Funkcja jest realizowana w celu wykonywania określonych zadań.
Najczęściej występującym przykładem jest modyfikacja treści wyświetlanych artykułów. Na przykład, przed każdym artykułem automatycznie dodaje się specjalna zdjęcie jako zdjęcie nagłówkowe, które służy jako wprowadzenie do treści artykułu.
Polecamy lekturę. Przewodnik po tworzeniu wtyczek do WordPressa: buduj swój pierwszy niestandardowy moduł funkcjonalny od podstaw.。
function my_plugin_prepend_featured_image_to_content( $content ) {
// 只在主循环的单篇文章页面生效
if ( is_single() && in_the_loop() && is_main_query() ) {
$featured_image = get_the_post_thumbnail( null, 'medium', array( 'class' => 'alignleft' ) );
if ( $featured_image ) {
$content = $featured_image . $content;
}
}
return $content;
}
// 将函数挂载到`the_content`这个过滤器钩子上
add_filter( 'the_content', 'my_plugin_prepend_featured_image_to_content' ); Realizacja funkcji dodatku: integracja pomiędzy backendem a frontendem
Pełny plugin wymaga interakcji z użytkownikiem, co oznacza, że musisz stworzyć interfejs administracyjny do edycji ustawień, a także może być konieczne dodanie nowych funkcji lub treści na stronach frontend.
Stworzenie strony z ustawieniami w tle (backend settings page).
Dostępna i jasno zorganizowana strona konfiguracji w tle jest kluczową elementą dla dobrego doświadczenia użytkownika przy korzystaniu z dodatków. WordPress oferuje różne API do dodawania menu głównego lub podmenu. Proces ten składa się zwykle z dwóch kroków: rejestracji elementów menu oraz określenia funkcji zwrotnej (callback) odpowiadających tym elementom menu, które będą wyświetlać treść strony.
Poniżej jest przykład dodania elementu menu podstawowego “Ustawienia”:
class My_Plugin_Admin {
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function add_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-plugin-settings', // 菜单slug
array( $this, 'render_settings_page' ) // 回调函数
);
}
public function register_settings() {
// 注册一个设置选项
register_setting( 'my_plugin_settings_group', 'my_plugin_option_name' );
// 添加一个设置区块
add_settings_section( 'my_plugin_main_section', '主要设置', null, 'my-plugin-settings' );
// 向区块中添加一个字段
add_settings_field(
'my_plugin_text_field',
'示例文本字段',
array( $this, 'render_text_field' ),
'my-plugin-settings',
'my_plugin_main_section'
);
}
public function render_settings_page() {
?>
<div class="wrap">
<h1>Ustawienia mojej wtyczki.</h1>
<form action="/pl/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'my_plugin_settings_group' );
do_settings_sections( 'my-plugin-settings' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="pl"/></form>
</div>
<?php
}
public function render_text_field() {
$option = get_option( 'my_plugin_option_name' );
echo '<input type="text" name="my_plugin_option_name" value="' . esc_attr( $option ) . '" />';
}
} Wyświetlić funkcje na frontendzie witryny internetowej.
Możliwych sposobów implementacji funkcji na stronie frontowej jest wiele: można używać krótkich kodów (shortcodes), małych narzędzi (widgets) lub modyfikować istniejący wygląd strony za pomocą API. Krótki kody to prosty i skuteczny sposób, który umożliwia użytkownikom uruchomienie funkcji dodatków poprzez wprowadzenie jednego prostego tagu w edytorze artykułów lub stron.
Aby stworzyć krótki kod, należy użyć odpowiednich narzędzi lub metod. add_shortcode() Funkcja:
// 定义一个简单的短代码,用于显示一个问候语
function my_plugin_greeting_shortcode( $atts ) {
// 解析短代码属性
$atts = shortcode_atts( array(
'name' => '访客',
), $atts, 'greeting' );
// 返回输出内容
return '<p class="my-plugin-greeting">'Cześć!' . esc_html($atts['name']) . “!</p>'add_shortcode( 'greeting', 'myplugin_greeting_shortcode' ); Użytkownik musi tylko wpisać tekst w edytorze artykułów. [greeting name="张三"]Wtedy na stronie frontendowej wyświetli się tekst “Hello, Zhang San!”.
Podsumowanie.
Rozwoj wtyczek dla WordPress polega na wdrożeniu własnych rozwiązań do ogromnego ekosystemu tego systemu, a kluczowymi elementami tego procesu są zrozumienie i skuteczne wykorzystanie mechanizmów zwanych „akcje” (actions) oraz „filtry” (filters). Uspłyšny rozwój wtyczki zaczyna się od jasnej, modułowej struktury plików, która stanowi solidną podstawę dla dalszego utrzymania i rozszerzania jej funkcji. Dzięki tworzeniu stron konfiguracji w backendzie wtyczka staje się łatwiejsza w obsłudze i konfiguracji, a zaawansowane funkcje można bezproblemowo integrować z frontendem witryny za pomocą krótkich kodów, narzędzi lub dostosowanych API. Bezpieczeństwo, kompatybilność z różnymi językami oraz jakość kodu to aspekty, na które należy zawsze zwracać uwagę podczas całego procesu rozwoju. Posłuchanie standardów programowania WordPress oraz najlepszych praktyk gwarantuje nie tylko stabilność działania wtyczki, ale także jej lepsze wdrożenie do ekosystemu i lepszą obsługę użytkowników.
FAQ – najczęściej zadawane pytania.
Jaki poziom znajomości PHP jest wymagany do tworzenia wtyczek (pluginów) dla WordPress?
Aby stworzyć prosty plugin, wystarczą podstawowe znajomości PHP, takie jak zmienne, funkcje, warunkowe instrukcje i pętli. Jednak aby zaprojektować plugin komercyjny o złożonej funkcjonalności, bezpiecznym i wydajnym, konieczne jest głębsze zrozumienie różnych aspektów programowania, w tym programowania obiektowego (OOP) oraz API serwisu WordPress, w szczególności klasy obsługujące operacje z bazą danych. wpdbWymagane są znajomości API do wysyłania HTTP żądań, najlepszych praktyk bezpieczeństwa (takich jak walidacja danych, escapeowanie znaków, zapobieganie atakom typu SQL injection i CSRF), a także podstawowych zasad programowania w JavaScript i CSS, niezbędnych do realizacji interakcji na stronie użytkownika.
Zaleca się zacząć od modyfikacji istniejących dodatków (plug-inów) lub tworzenia prostych funkcji, a potem stopniowo pogłębiać swoje znajomości.
Jak zapewnić, że plugin, który rozwijam, jest bezpieczny?
Zabezpieczenie bezpieczeństwa pluginów to proces składający się z kilku etapów. Najpierw należy dokonać surowej weryfikacji i filtracji wszystkich danych pochodzących od użytkowników lub z zewnątrz (np. danych z formularzy, parametrów URL, plików cookie). Do tego celu można używać funkcji dostępnych w WordPress. sanitize_text_field(), esc_html(), esc_url() 和 wp_kses() I tak dalej.
Następnie, przy wykonywaniu operacji na bazie danych, koniecznie należy używać… $wpdb Metody dostępne w klasie (np.) prepare() Aby zapobiec atakom typu SQL injection, należy używać odpowiednich metod bezpieczeństwa w kodzie. Przed wysłaniem jakichkolwiek danych na stronę klienta konieczne jest ich odpowiednie escapeowanie. W przypadku operacji wymagających upoważnień zawsze należy korzystać z funkcji sprawdzających uprawnienia. current_user_can()Dodatkowo, w celu sprawdzenia intencji żądania używa się nieujawnionych („nonce”) wartości, aby zapobiec falsyfikacji żądań między witrynami (CSRF – Cross-Site Request Forgery).
Po zakończeniu rozwoju pliku rozszerzalnego (pluginu), jak go rozdawać i aktualizować?
Możliwe są dwa głównego sposoby dystrybucji pluginów: poprzez oficjalny katalog dodatków do WordPress lub bezpośrednio poprzez udostępnienie plików do pobrania na własnym witrynie internetowym. Aby plugin mógł zostać automatycznie zainstalowany przez użytkowników w panelu administracyjnym i otrzymywać aktualizacje, musi zostać zgłoszony do oficjalnego katalogu. To wymaga, aby kod pluginu był zgodny z licencją GPLv2 (lub wyższą) oraz aby przeszedł przez surowe audyty bezpieczeństwa i jakości kodu.
Po złożeniu pliku WordPress pobierze kod twojego pluginu z oficjalnego repozytorium Subversion (SVN). Aby uruchomić powiadomienie o aktualizacji, musisz zmienić numer wersji (“Version”) umieszczonego w komentarzu na początku głównego pliku w repozytorium SVN oraz złożyć nowy tag zawierający ten numer wersji.
W przypadku komercyjnych pluginów usługi aktualizacji są zwykle realizowane na własnym serwerze. To wymaga napisania narzędzia do sprawdzania dostępności nowych aktualizacji, a także użycia odpowiednich „hooków” (związków programowych) w celu automatycznego pobierania i wdrażania tych aktualizacji. pre_set_site_transient_update_pluginsIntegruje się z systemem aktualizacji WordPress, porównuje informacje o wersjach na zdalnych serwerach i dostarcza pakety aktualizacyjne.
Jak uniknąć konfliktów pomiędzy nazwami klas i funkcji w plug-inach?
Unikanie konfliktów nazw jest podstawowym wymogiem przy rozwijaniu profesjonalnych dodatków (pluginów). Najlepszą praktyką jest używanie prefiksów. Dla wszystkich klas, funkcji, konstant oraz nawet globalnych zmiennych w twoim dodatku (staraj się ich unikać) wybierz unikalny i opisowy prefiks. Ten prefiks może być skróceniem lub pełnym nazwem twojej firmy lub nazwy dodatku.
Na przykład, jeśli twoje rozszerzenie nazywa się “Awesome Gallery”, prefiks twoich funkcji może brzmieć tak: ag_ 或 awesome_gallery_Nazwa klasy może być dowolna. AG_Core 或 Awesome_Gallery_Admin。
Lepszym rozwiązaniem jest umieszczenie kodu w klasie, wtedy większość funkcji będzie dostępna w postaci metod tej klasy. $this->method()Dzięki temu unikniono zanieczyszczenia globalnego przestrzeni nazw. Funkcje, które muszą zostać zdefiniowane w globalnym obszarze, powinny mieć długie i unikalne prefiksy.
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.
- 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
- Pełny przewodnik po rozwoju pluginów dla WordPressa: od poznania podstaw do osiągnięcia biegłości w tworzeniu profesjonalnych rozszerzeń
- Rozwój pluginów dla WordPress: od poznania podstaw do osiągnięcia biegłości – stworzenie twojego pierwszego własnego pluginu
- Od zera do jednego: pełny przewodnik po stopniowym tworzeniu twojego pierwszego dodatku dla WordPress