Podstawy pluginów w WordPressie i środowisko rozwoju
Przed rozpoczęciem pisania kodu istotne jest zrozumienie podstawowych zasad działania pluginów WordPress oraz przygotowanie odpowiedniego środowiska rozwojowego. Plugin WordPress to w istocie folder zawierający kod w języku PHP, który służy do rozszerzania funkcjonalności platformy za pomocą bogatej API dostępnej w WordPress. Pluginy mogą być bardzo proste – zawierająć jedynie krótki fragment kodu – ale mogą też być bardzo złożone i obejmować całe systemy zarządzania. Kluczowym princypem jest “nie modyfikowanie kodu źródłowego WordPress”, co gwarantuje, że Twoje własne rozszerzenia nie zostaną utracone podczas aktualizacji platformy.
Aby efektywnie rozwijać aplikacje, potrzebny jest lokalny środowisko rozwoju. Można szybko uruchomić serwer z PHP i MySQL za pomocą narzędzi takich jak XAMPP, MAMP, Local by Flywheel lub Docker. Następnie należy zainstalować najnowszą wersję WordPress. Podczas procesu rozwoju zaleca się korzystać z tego lokalnego środowiska.wp-config.phpUwolniono włączenie w pliku.WP_DEBUGAby błędy mogły zostać wykryte w czasie.
“Serce” pluginu to główny plik w języku PHP. Komentarze umieszczone na początku tego pliku stanowią jego „danych tożsamości”; WordPress używa tych informacji, by identyfikować i zarządzać pluginem w tle. Standardowe komentarze umieszczone na początku pliku głównego pluginu wyglądają następująco:
Polecamy lekturę. Czym jest motyw WordPress?。
<?php
/**
* Plugin Name: 我的第一个自定义插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于学习插件开发的简单插件,它将在文章末尾添加自定义内容。
* Version: 1.0.0
* Author: 开发者名称
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Stworz swoje pierwsze funkcjonalne dodatko (plugin).
Zacznijmy od konkretnej funkcji: automatycznego dodawania ustalonego tekstu na końcu każdego artykułu na stronie internetowej. Ten przykład pokazać będzie kluczowe etapy rozwoju tego dodatku (pluginu).
Główny plik pluginu i procedura inicjalizacji
Najpierw, w WordPress…wp-content/pluginsUtwórz nowy folder w katalogu, na przykładmy-first-pluginW tym folderze utwórz główny plik PHP; może mieć nazwę:my-first-plugin.phpKopij kod z powyższego komentarza i wklej go we właściwe miejsce.
Następnie potrzebujemy bezpiecznego sposobu na wykonywanie kodu inicjalizacji pluginu. Najlepszą praktyką jest umieszczenie wszystkich funkcji w jednej klasie lub użycie funkcji z przestrzeni nazw (namespace). Tutaj użyjemy prostej klasy do organizacji kodu. Po komentarzach w nagłówku głównego pliku dodaj definicję klasy następującą:
if ( ! defined( 'ABSPATH' ) ) {
exit; // 防止直接访问文件
}
class My_First_Plugin {
public function __construct() {
// 构造函数,在这里挂载钩子
}
}
// 初始化插件
new My_First_Plugin(); if ( ! defined( ‘ABSPATH’ ) )Ten kod stanowi standard bezpieczeństwa w rozwoju pluginów dla WordPress i służy do zapobiegania temu, by użytkownicy mogli bezpośrednio uzyskać dostęp do plików twojego pluginu poprzez adres URL.
Użyj haczyków, aby dodać treść do nagłówka strony artykułu.
Architektura pluginów w WordPressu jest zbudowana na systemie “hooków” (hooks), który składa się z dwóch typów elementów: akcji (Actions) i filtrów (Filters). Akcje umożliwiają wykonywanie kodu w określonych momencach, natomiast filtry pozwalają modyfikować dane.
Polecamy lekturę. Światowy przewodnik po optymalizacji wydajności witryn WordPress: od podstawowych ustawień do szczegółowego opisania pluginów do cache’owania。
Naszym celem jest dodanie tekstu po treści artykułu – to proces “filtracji” zawartości. Dlatego użyjemy…the_contentTen filtr: Zmodyfikuj konstruktor i metody w klasie w następujący sposób:
class My_First_Plugin {
public function __construct() {
// 将自定义方法挂载到‘the_content’过滤器上
add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
}
/**
* 在文章内容后添加自定义页脚
*
* @param string $content 原始文章内容。
* @return string 修改后的文章内容。
*/
public function add_footer_to_content( $content ) {
// 确保只在主循环的单篇文章页面显示
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_footer = '<div class="my-plugin-footer"><p>Dziękujemy za przeczytanie tego tekstu! Powstał przy użyciu narzędzia „Moje pierwsze wtyczki” („My First Plugin”).</p></div>';
$content .= $custom_footer;
}
return $content;
}
} add_filter()Funkcja wykorzystuje metodę klasy.add_footer_to_contentZarejestruj się.the_contentFiltry: Gdy WordPress przygotowuje się do wyświetlenia treści artykułu, wywołuje naszą metodę i przekazuje oryginalny tekst. Za pomocą warunków sprawdzamy, czy należy dodawać stopkę tylko na stronie danego artykułu, unikając jej powtarzania na głównej stronie lub stronie archiwów. Na koniec dodajemy własny kod HTML do treści i powracamy wynik.
Dodać opcje do panelu administracyjnego dla wtyczki
Dojrzały plugin zwykle umożliwia konfigurację przez użytkownika w tle systemu. Dodamy prosty element ustawień do tekstu na dole strony, aby użytkownicy mogli sami wybrać tekst, który ma być wyświetlany.
Stworzenie strony menu ustawień
Musimy dodać nową podstranicę w menu “Ustawienia” w panelu administracyjnym WordPressa. Do tego potrzebny będzie odpowiedni kod.add_options_page()Funkcja jest zwykle montowana (tworzy się połączenie między nią a odpowiednim obiektem w programie).admin_menuNa haczkach akcji.
Najpierw w klasie pluginu dodaj nową metodę do rejestracji menu i stron:
class My_First_Plugin {
// ... 之前的构造函数和方法 ...
public function __construct() {
add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
// 挂载后台管理菜单
add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
// 挂载初始化设置选项
add_action( 'admin_init', array( $this, 'settings_init' ) );
}
public function add_admin_menu() {
add_options_page(
'我的第一个插件设置', // 页面标题
'自定义页脚设置', // 菜单标题
'manage_options', // 所需权限
'my-first-plugin', // 菜单slug
array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
);
}
} Pola ustawień rejestracji a także strona wyświetlana przez użytkownika
Następnie potrzebujemy użyć API ustaw WordPress, aby bezpiecznie zarejestrować, zapisać i zweryfikować opcje. To wymaga…register_setting(), add_settings_section()和add_settings_field()Funkcje takie jak…
Polecamy lekturę. Co to jest WooCommerce? Pełny opis jego kluczowych funkcji i zastosowań。
public function settings_init() {
// 注册一个设置选项组
register_setting( 'my_first_plugin_settings', 'my_first_plugin_options' );
// 在页面中添加一个设置区域
add_settings_section(
'my_first_plugin_section',
'页脚内容配置',
array( $this, 'section_callback' ),
'my-first-plugin'
);
// 向该区域添加一个字段
add_settings_field(
'footer_text',
'页脚显示文本',
array( $this, 'footer_text_field_render' ),
'my-first-plugin',
'my_first_plugin_section'
);
}
public function section_callback() {
echo '<p>Tu konfigurujesz tekst, który będzie wyświetlany na końcu artykułu.</p>';
}
public function footer_text_field_render() {
$options = get_option( 'my_first_plugin_options' );
$value = $options['footer_text'] ?? '感谢阅读本文!由【我的第一个插件】生成。'; // 默认值
?>
<input type='text' name='my_first_plugin_options[footer_text]' value='<?php echo esc_attr( $value ); ?>' style='width: 400px;'>
<p class="description">Podporowane są proste tagi HTML, np. <strong>, <em>, <a>。<p>Nie wiem, co zrobić. Jestem taki zmęczony.</p>
<?php
}
public function options_page_html() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<form action='/pl/options.php/' method='post' data-trp-original-action="options.php">
<?php
settings_fields( 'my_first_plugin_settings' );
do_settings_sections( 'my-first-plugin' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="pl"/></form>
</div>
<?php
} Na koniec należy zmienić funkcję wyświetlania na stronie klienta (frontend).add_footer_to_contentAby to zrobić, należy skorzystać z funkcji, która umożliwia odczytywanie tekstu z bazy danych z listy dostępnych opcji.
public function add_footer_to_content( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$options = get_option( 'my_first_plugin_options' );
$footer_text = $options['footer_text'] ?? '感谢阅读本文!由【我的第一个插件】生成。';
$custom_footer = '<div class="my-plugin-footer"><p>'. wp_kses_post( $Footer_text ) . '</p></div>';
$content .= $custom_footer;
}
return $content;
} wp_kses_post()Funkcja sprawdza, że w tekście wprowadzonym przez użytkownika są dostępne tylko bezpieczne tagi HTML, co stanowi istotną między innymi mierę bezpieczeństwa.
Internacjonalizacja pluginów i najlepsze praktyki
Aby plugin był dostępny dla użytkowników z całego świata, internacionalizacja (i18n) jest niezbędnym krokiem. WordPress wykorzystuje framework GNU gettext do realizacji tłumaczeń.
Pola tekstowe i funkcje tłumaczeniowe
Najpierw upewnij się, że w komentarzach na początku pliku z pluginem zostały definiowane wszystkie niezbędne elementy.Text DomainNa przykładmy-first-pluginNastępnie, we wszystkich miejscach w pluginie, gdzie występują teksty wymagające tłumaczenia, należy je otoczyć określoną funkcją.
Zmodyfikujmy nasz wcześniejszy kod, aby tekst wyświetlany miał również funkcję tłumaczenia.
// 在构造函数中加载翻译文件
public function __construct() {
// ... 其他钩子 ...
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
}
public function load_textdomain() {
load_plugin_textdomain(
'my-first-plugin',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages/'
);
}
// 修改设置页面的字符串
public function section_callback() {
echo '<p>' . esc_html__( '在这里配置显示在文章末尾的文本内容。', 'my-first-plugin' ) . '</p>';
}
public function footer_text_field_render() {
$options = get_option( 'my_first_plugin_options' );
$value = $options['footer_text'] ?? __( '感谢阅读本文!由【我的第一个插件】生成。', 'my-first-plugin' );
?>
<input type='text' name='my_first_plugin_options[footer_text]' value='<?php echo esc_attr( $value ); ?>' style='width: 400px;'>
<p class="description"><?php esc_html_e( '支持简单的HTML标签,如 <strong>, <em>, <a>。', 'my-first-plugin' ); ?></p>
<?php
}
// 注意:用户在前台输入的“页脚文本”本身通常不需要翻译,因为它是由管理员设置的具体内容。 __()Zadanie polega na tłumaczeniu i powrotowaniu danej stringowej wartości.esc_html__()Znaczek używany do tłumaczenia i escapeowania wyświetlanych w formie HTML danych._e()Funkcja służy do tłumaczenia i bezpośredniego wyświetlania tekstów. Drugi parametr tej funkcji to obszar tekstowy, który musi być zgodny z definicją zawartą w pluginie.
Bezpieczeństwo, wydajność i organizacja kodu
Poza internacionalizacją należy też stosować następujące zasady najlepszej praktyki:
1. Bezpieczeństwo: Wszystkie dane wprowadzone przez użytkowników muszą być sprawdzone, przygotowane do dalszego użycia („cleaned”) i odpowiednio zabezpieczone („escaped”). Do tego celu należy używać odpowiednich metod i narzędzi.sanitize_text_field(), esc_html(), wp_kses_post()i innych funkcji. Użyj przyciskuwp_nonce_field()Zabezpieczenie przed atakami typu CSRF (Cross-Site Request Forgery).
2. Wydajność: Korzystaj z hooków z rozumnością, unikając wykonywania niepotrzebnych zapytań do bazy danych przy każdym ładowaniu strony. Można zastanowić się nad ustawieniem tymczasowego cache’u dla wyników wyświetlanych na ekranie.
3. Organizacja kodu: W przypadku złożonych pluginów pliki należy rozdzielić według modułów funkcjonalnych. Główny plik ma za zadanie sterowanie pracą pluginu, a klasy i metody umieszcza się w odpowiednich folderach.includes/Katalog, a zasoby front-end (CSS, JS) znajdują się w…assets/Spis treści.
4. Odinstalowanie i czyszczenie: Jeśli twoje wtyczki tworzą tabele w bazie danych lub ustawienia, powinny być dostępne funkcje odinstalowania, aby usunąć te dane. Można to zrobić za pomocą osobnej procedury.uninstall.phpMożna to zrealizować za pomocą plików.
Podsumowanie.
W ramach tego tutorialu ukończyliśmy cały proces rozwoju własnego pluginu do WordPressa z podstawowymi funkcjami: od przygotowania środowiska, stworzenia szkieletu pluginu, dodawania funkcji za pomocą systemu hooków, poprzez implementację strony konfiguracji w tle, aż po uwzględnienie aspektów internacionalizacji i bezpieczeństwa. Nauczyliście się, jak to zrobić.add_filter和add_actionInterakcja z core’em WordPress: jak używać API Settings do tworzenia zaufanych stron z opcjami, a także jak to robić poprzez…load_plugin_textdomainUdostępnij plugin w kilku językach. Pamiętaj, że przy tworzeniu pluginów bezpieczeństwo, łatwość konserwacji oraz doświadczenie użytkownika są najważniejszymi kryteriami. Na tej podstawie możesz dalej eksplorować zaawansowane funkcje, takie jak dostosowanie typów artykułów, metadanych, skrótów kodu oraz punktów końcowych API typu REST, aby stworzyć jeszcze lepsze rozszerzenia dla WordPress.
FAQ – najczęściej zadawane pytania.
Dlaczego mój plugin nie jest wyświetlany w menu w tle (w obszarze zarządzania aplikacją)?
Zwykle to wynika z problemów z uprawnieniami lub błędów w kodzie. Najpierw upewnij się, że…add_options_page或add_menu_pageParametry upoważnień określone w funkcji (np.‘manage_options’Musi pasować do roli użytkownika, pod którą aktualnie masz zalogowaną. Następnie sprawdź…admin_menuCzy hook został poprawnie zainstalowany, a funkcja wywołana w ramach tego hooka nie zawiera błędów gramatycznych, które mogłyby przerywać wykonywanie PHP? Najprostszym sposobem na to jest włączenie tej funkcji w panelu administracyjnym WordPress.WP_DEBUGSprawdź, czy nie wystąpiły żadne powiązane informacje o błędach.
Jak dodać pliki CSS i JavaScript do pluginu?
Poprawnym sposobem jest używanie…wp_enqueue_style()和wp_enqueue_script()Funkcje. W przypadku zasobów front-end należy je umieścić w odpowiednim miejscu („mount” w języku programowania).wp_enqueue_scriptsZaakopczyć na akcji hooku; w przypadku zasobów w administracyjnym interfejsie, montować je tam.admin_enqueue_scriptsNa haczu.
W twoim klasie pluginu możesz dodać następujące metody:
public function enqueue_frontend_assets() {
wp_enqueue_style( ‘my-plugin-style’, plugin_dir_url( __FILE__ ) . ‘assets/css/style.css’, array(), ‘1.0.0’ );
} A potem w konstruktorze to zrealizujesz poprzez…add_action( ‘wp_enqueue_scripts’, array( $this, ‘enqueue_frontend_assets’ ) );Zarejestruj się. Dzięki temu można mieć pewność, że zarządzanie zależnościami będzie poprawne, a nie dojdzie do konfliktów z innymi pluginami lub tematami.
Jak usunąć dane, które ustanowiłem, gdy użytkownik odinstaluje dodatek?
WordPress oferuje dwa głównego sposoby implementacji tego funkcjonalności. Pierwszy polega na rejestracji „hooka” do odinstalowania pluginu, ale ten metod nie jest często używany w obiektowych pluginach. Zaleca się i jest standardowym rozwiązaniem tworzenie nowego elementu kodu, który umożliwi odinstalowanie pluginu w odpowiednim momencie.uninstall.phpPlik znajduje się w tej samej obrębie katalogu co twoje główne pliki pluginów.
Gdy użytkownik usuwa wtyczkę w panelu administracyjnym WordPressa, system automatycznie sprawdza i wykona działania związane z tą wtyczką.uninstall.phpW tym przypadku należy najpierw sprawdzić…WP_UNINSTALL_PLUGINCzy są definiowane stałe (constanty), a potem wszystkie opcje utworzone przez plugin, a także dane z dowolnych ustawionych tabel w bazie danych są bezpiecznie usunięte? Na przykład:
if ( ! defined( ‘WP_UNINSTALL_PLUGIN’ ) ) {
exit;
}
delete_option( ‘my_first_plugin_options’ );
// 如果有自定义表:$wpdb->query( “DROP TABLE IF EXISTS {$wpdb->prefix}my_table” ); Jak moja wtyczka może być kompatybilna z większą liczbą wersji WordPress?
Kluczem do utrzymania kompatybilności jest ostrożne używanie funkcji i zalet nowych wersji, a także dostarczenie alternatyw dla starszych wersji. Przed wywołaniem funkcji, które mogą być dostępne tylko w nowych wersjach, należy upewnić się, że działają poprawnie.function_exists()Sprawdź to. Na przykład, jeśli chcesz użyć funkcji wprowadzonych w wersji 5.0…wp_dateFunkcje mogą:
if ( function_exists( ‘wp_date’ ) ) {
$date = wp_date( get_option( ‘date_format’ ), $timestamp );
} else {
$date = date_i18n( get_option( ‘date_format’ ), $timestamp );
} W tych samych komentarzach umieszczonech w nagłówku pliku rozszerzenia, a także w pliku readme, należy jasno zaznaczyć najniższy wymagany version WordPressu, na którym zostały przeprowadzone testy. Regularne testy na starszych wersjach WordPressu to najlepszy sposób na zapewnienie kompatybilności.
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.
- Dokładny analiz wykorzystania platformy WooCommerce: tworzenie zaawansowanych stron handlowych na WordPress od zera
- Pełny przewodnik po optymalizacji wydajności WordPress: od podstaw do elementów front-end, aby zwiększyć szybkość działania witryny
- Jak zainstalować i konfigurować certyfikat SSL dla swojego witryny WordPress?
- Przewodnik po konfiguracji optymalizacji cache na całym serwisie w WooCommerce: jak zwiększyć szybkość i konwersję witryn handlowych opartych na WordPress.
- Światowy przewodnik po instalacji i wyborze tematów dla platformy WooCommerce w 2026 roku