Podstawy rozwoju pluginów dla WordPressa i przygotowanie środowiska do ich tworzenia
Podstawa rozwoju pluginów dla WordPress polega na rozszerzaniu funkcjonalności tego systemu, a wszystko to zaczyna się od dobrze zorganizowanego środowiska rozwojowego. Plugin to w istocie jeden lub kilka plików w formacie PHP, które znajdują się w katalogu instalacji WordPress./wp-content/plugins/W folderze znajdują się pliki wszystkich pluginów. Każdy plugin musi mieć plik główny, na początku którego znajduje się blok komentarzy zawierający informacje identyfikacyjne pluginu. Te informacje są używane przez system WordPress do identyfikacji pluginu oraz uzyskania informacji o jego funkcjach i wymaganiach.
Typowy komentarz umieszczonej na początku pliku rozszerzenia (pluginu) wygląda następująco:
<?php
/**
* Plugin Name: 我的第一个WordPress插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单插件。
* Version: 1.0.0
* Author: 开发者名称
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Ten komentarz jest niezbyt ważny, ponieważ pozwala tylko na wyświetlenie pluginu na stronie zarządzania pluginami w backendzie WordPress.Text DomainZastosowane do celów internacjonalizacji, w przygotowaniu do dalszych prac tłumaczeniowych.
Polecamy lekturę. Kompletny przewodnik po tworzeniu wtyczek WordPress: praktyczny poradnik od podstaw do publikacji i uruchomienia.。
Konfiguracja lokalnego środowiska deweloperskiego.
Przed rozpoczęciem kodowania stworzenie lokalnego środowiska rozwoju jest efektywnym i bezpiecznym rozwiązaniem. Zaleca się użyć narzędzi takich jak XAMPP, MAMP, Local by Flywheel lub Docker do uruchomienia lokalnego serwera zawierającego Apache/Nginx, MySQL i PHP. Upewnij się, że Twoja wersja PHP odpowiada wymaganiom aktualnej najpopularniejszej wersji WordPress (zwykle zaleca się PHP 7.4 lub wyższe).wp-config.phpWłączyć w…WP_DEBUGMode (tryby pracy) pomagają szybko wykrywać i naprawiać błędy podczas procesu rozwoju.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // 将错误日志保存到 /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息 Podstawowa architektura pluginów oraz mechanizm hooków
Zrozumienie mechanizmu hooków w WordPress jest kluczowym elementem przy tworzeniu dodatków (pluginów). Hooki umożliwiają dodatkowi włączenie się do standardowego procesu działania WordPress w określonych momencach i wykonywanie własnego kodu. Hooki dzielą się głównie na dwa typy: akcje (Actions) i filtry (Filters).
Haki akcji i haki filtrów.
Aktywnie działające „haki” (ang. Action Hooks) umożliwiają wykonywanie kodu w momencie wystąpienia określonego wydarzenia. Na przykład można wysłać wiadomość e-mail po opublikowaniu artykułu lub zarejestrować informację o logowaniu użytkownika.add_action()Funkcja służy do zarejestrowania Twojej funkcji w określonym „hooku akcji” (action hook).
function myplugin_send_notification( $post_id ) {
// 当文章发布时,执行发送通知的逻辑
wp_mail( '[email protected]', '新文章已发布', '文章ID:' . $post_id );
}
// 将 myplugin_send_notification 函数挂载到 ‘publish_post’ 这个动作钩子上
add_action( 'publish_post', 'myplugin_send_notification' ); Filtry hooki (Filter Hooks) umożliwiają modyfikację danych przekazywanych w trakcie wykonywania procesów. Na przykład można zmienić sposób wyświetlania treści artykułu lub zmienić wartość powrotną danej funkcji.add_filter()Funkcja służy do rejestracji filtrów.
function myplugin_modify_content( $content ) {
// 在文章内容的末尾追加一段自定义文本
$custom_text = '<p><em>Dziękujemy za przeczytanie! Ten tekst został dodany przez moje dodatkowe moduły (pluginy).</em></p>';
return $content . $custom_text;
}
// 将 myplugin_modify_content 函数挂载到 ‘the_content’ 这个过滤器钩子上
add_filter( 'the_content', 'myplugin_modify_content' ); Wykonanie klasy głównej pluginu
Choć prosty plugin może składać się z zaledwie kilku funkcji, z powodu modularności, łatwości utrzymania oraz uniknięcia konfliktów nazw zaleca się stosowanie podejścia obiektowego (OOP) i umieszczenie funkcji pluginu w jednej głównej klasie. To najlepsza praktyka w dzisiejszym rozwoju pluginów dla WordPress.
Polecamy lekturę. Wprowadzenie do tworzenia motywów w WordPressie: budowanie swojego pierwszego motywu od podstaw.。
class My_First_Plugin {
public function __construct() {
// 在构造函数中挂载所有的钩子
add_action( 'init', array( $this, 'register_shortcode' ) );
add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
}
public function register_shortcode() {
add_shortcode( 'greeting', array( $this, 'render_greeting' ) );
}
public function render_greeting( $atts ) {
return '<h3>Witaj, WordPress!</h3>';
}
public function add_admin_page() {
add_menu_page(
'我的插件设置',
'我的插件',
'manage_options',
'my-plugin-settings',
array( $this, 'render_admin_page' )
);
}
public function render_admin_page() {
echo '<div class="wrap"><h2>Strona ustawień dodatku</h2><p>To jest interfejs administracyjny.</p></div>';
}
}
// 初始化插件
new My_First_Plugin(); Tworzenie interfejsu administracyjnego i krótkich kodów
Dobrze zaprojektowany plugin wymaga interakcji z użytkownikami – to oznacza, że musi dostarczać administratorom witryny możliwości konfiguracji w środowisku backend, a redaktorom treści – prostych sposobów wykorzystania dostępnych funkcji w środowisku frontend.
Stworzenie strony konfiguracji dla backendu
WordPress oferuje bogatą API do tworzenia menu w administracji oraz ich podmenu. Na przykład:add_menu_page()、add_submenu_page()Na stronie konfiguracji możesz użyć API ustawień WordPress (Settings API) do bezpiecznego rejestracji, weryfikacji i zapisu opcji. To jest bezpieczniejsze niż ręczne zarządzanie nimi.$_POSTDane muszą być znacznie bardziej bezpieczne i niezawodne.
public function add_admin_page() {
add_options_page(
'我的插件选项', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-plugin-options', // 菜单slug
array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
);
// 注册设置、节和字段
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function register_settings() {
register_setting( 'myplugin_options_group', 'myplugin_option_name' );
add_settings_section( 'myplugin_section_id', '主要设置', null, 'my-plugin-options' );
add_settings_field( 'myplugin_field_id', '示例字段', array( $this, 'field_html' ), 'my-plugin-options', 'myplugin_section_id' );
}
public function field_html() {
$option = get_option( 'myplugin_option_name' );
echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}
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( 'myplugin_options_group' );
do_settings_sections( 'my-plugin-options' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="pl"/></form>
</div>
<?php
} Rozwijanie funkcji krótkich kodów
Shortcode to doskonały sposób, aby użytkownicy mogli łatwo włączyć funkcje dodatków (pluginów) do tekstów artykułów lub stron internetowych.add_shortcode()Funkcja jest zarejestrowana, a jej funkcja wywołania w zakresie (callback function) odbiera określone atrybuty.$atts)i treść ($contentPrzyjmuje parametry i powraca ostateczny tekst, który ma zostać wyświetlony.
public function register_shortcodes() {
add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}
public function render_latest_posts( $atts ) {
// 设置默认属性,并使用 shortcode_atts 合并用户传入的属性
$attributes = shortcode_atts( array(
'count' => 5,
'category' => '',
), $atts );
$args = array(
'posts_per_page' => intval( $attributes['count'] ),
'post_status' => 'publish',
);
if ( ! empty( $attributes['category'] ) ) {
$args['category_name'] = sanitize_text_field( $attributes['category'] );
}
$query = new WP_Query( $args );
$output = '<ul>';
while ( $query->have_posts() ) {
$query->the_post();
$output .= '<li><a href="/pl/' . get_permalink() . '/">'.get_the_title()'.'</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
} Bezpieczeństwo pluginów, ich wydajność oraz przygotowanie do publikacji
W ostatnim etapie rozwoju należy upewnić się, że dodatek jest bezpieczny, wydajny i łatwy w dystrybucji. Ignorowanie tych aspektów może doprowadzić do wystąpienia bezpieczeństwowych problemów, spowolnienia działania witryny internetowej lub złego doświadczenia użytkownika.
Bezpieczeństwo i weryfikacja danych.
Wszelkie dane pochodzące od użytkowników lub z zewnętrznych źródeł (np. parametry URL, dane wysłane w formularzach, bazy danych) są niepoważne pod względem wiarygodności. Konieczne jest ich sprawdzenie, oczyszczenie oraz uwzględnienie specjalnych zasad formatowania („escape”) za pomocą funkcji dostępnych w WordPress.
* 验证(Validation):检查数据是否符合预期格式(如是否为邮箱、数字),使用is_email()、intval()I tak dalej.
* 清理(Sanitization):在数据保存到数据库之前,移除其中不安全的字符,使用sanitize_text_field()、sanitize_email()、wp_kses_post()I tak dalej.
* 转义(Escaping):在将数据输出到HTML、JavaScript或URL之前,对其进行编码,防止XSS攻击,使用esc_html()、esc_js()、esc_url()、esc_attr()I tak dalej.
Podczas operacji na bazie danych konieczne jest używanie standardowych i bezpiecznych procedur.$wpdbMetody dostępne w klasie, a także ich wykorzystanie.prepare()Zapytówki są parametryzowane, aby zapobiec atakom typu SQL injection.
Polecamy lekturę. Zasady i praktyczny przewodnik po akceleracji CDN: jak wybrać najlepszą sieć dystrybucji treści dla swojej witryny.。
Optymalizacja wydajności i późniejsze utrzymanie
Wydajność jest kluczową elementem doświadczenia użytkownika. Unikaj wykonywania czasochłonnych zapytań lub procesów podczas każdego ładowania strony. Dla danych, które nie zmieniają się często, użyj API do zarządzania tymczasowymi danymi (Transients API) w WordPress.
$data = get_transient( 'myplugin_expensive_data' );
if ( false === $data ) {
$data = // ... 执行复杂的数据库查询或远程API调用 ...
set_transient( 'myplugin_expensive_data', $data, HOUR_IN_SECONDS ); // 缓存1小时
} Aby dodać obsługę internacjonalizacji i lokalizacji do wtyczki, należy użyć__()、_e()Funkcje typu „wrap” obejmują cały tekst widzialny przez użytkownika i…load_plugin_textdomain()Wczytywane są pliki językowe. Podczas tego procesu należy także dobrze zaplanować życie cykliczne (lifecycle) pluginów oraz napisać kod odpowiedzialny za ich aktywację.register_activation_hook)、 wyłączenie (…)register_deactivation_hook) oraz dezinstalowanie (register_uninstall_hookLogika obsługi „haków” (hooków) służy do tworzenia/dodawania/zapisywania danych do bazy danych, usuwania tabel, a także do czyszczenia ustawień itd.
Przygotowanie do publikacji: dokumenty i pakowanie
Przed opublikowaniem stworz kopię dokładną i szczegółową.readme.txtPlik musi spełniać oficjalne wymogi WordPress, wliczając opis pluginu, instrukcje instalacji, najczęściej występujące pytania, historię aktualizacji itd. To jest strona prezentująca twój plugin w katalogu pluginów WordPress. Na koniec upewnij się, że struktura katalogu z plikami jest jasna, zawiera tylko niezbędne pliki i że plik jest pakowany w standardowym formacie ZIP.
Podsumowanie.
Rozwoj pluginów dla WordPress polega na przekształceniu pomysłów w funkcjonalne rozwiązania, a to wymaga głębokiego zrozumienia podstawowej architektury WordPress (zwłaszcza mechanizmu hooków). Pierwszym krokiem na drodze do zdobywania doświadczenia jest przygotowanie środowiska rozwojowego oraz napisanie podstawowego kodu pluginu. Następnie należy opanować używanie akcji (actions) i filtrów (filters). Organizacja kodu w sposób obiektowy znacząco poprawia jego utrzymanie. Bezpieczne interfejsy na stronie administracyjnej można tworzyć za pomocą API Settings, a elastyczne funkcje na stronie użytkownika za pomocą krótkich fragmentów kodu. Podczas całego procesu rozwoju należy stale stosować najlepsze praktyki dotyczące bezpieczeństwa (weryfikacja, czyszczenie danych, escape), wydajności (kompilacja w cache, optymalizacja zapytań) oraz internationalizacji. Dodatkowo istotne jest przygotowanie dokładnych dokumentacji. Tylko w taki sposób można stworzyć profesjonalny, niezawodny i popularny plugin dla WordPress.
FAQ – najczęściej zadawane pytania.
Aby rozwijać plugi dla WordPressa, należy opanować następujące języki programowania:
Podstawowym wymogiem jest biegłe opanowanie języka PHP, ponieważ WordPress wraz z jego pluginami i tematami jest pisany w tym języku. Ponadto konieczne jest posiadanie podstawowych znajomości HTML, CSS i JavaScript, aby tworzyć interfejsy użytkownika oraz logikę interakcji w pluginach. Jeśli są wymagane złożone operacje na bazie danych, niezbędne są też podstawowe umiejętności SQL.
Jak uniknąć konfliktów pomiędzy moim stworzonym pluginem a innymi pluginami?
Głównym sposobem na zapewnienie unikalności jest utrzymywanie jedyności nazw funkcji, klas, zmiennych oraz innych identyfikatorów. Najlepszą praktyką jest stosowanie programowania obiektowego oraz pakowanie całego kodu w jednej klasie. W przypadku funkcji i zmiennych globalnych można używać unikalnych prefiksów – na przykład skrótów lub nazw pluginów jako prefiksów.myplugin_function_name或MyPlugin_ClassName。
Dlaczego moje dodatkowe funkcje (plugin) dodają menu w tle, a na stronie wyświetla się komunikat “Nie masz dostatecznych upoważnień, by uzyskać dostęp do tej strony”?
To jest dlatego, że przy wywołaniu…add_menu_page()Gdy używasz podobnych funkcji, ustawione parametry dotyczące uprawień („Capability”) mogą być niewłaściwe. Musisz upewnić się, że trzeci parametr (odnoszący się do uprawień) odpowiada uprawom aktualnego użytkownika. Na stronach konfiguracji dostępnych wyłącznie dla administratorów zwykle używa się specjalnych uprawień.‘manage_options’Możesz ponownie użyć tego w funkcji obsługiwania wywołania (callback function).current_user_can( ‘manage_options’ )Zrób sprawdzenie.
Jak dodać mojemu pluginowi wsparcie dla tłumaczeń?
Najpierw należy poprawnie ustawić informacje w komentarzach na początku głównego pliku pluginu.Text Domain(Na przykład)my-pluginA potem, użyj…__( ‘Text’, ‘my-plugin’ )或_e( ‘Text’, ‘my-plugin’ )Funkcja umożliwia umieszczenie wszystkich tekstów, które potrzebują zostać przetłumaczone, w jednym obszarze. Na koniec, teksty te są wykorzystane podczas inicjalizacji pluginu (na przykład w momencie…).init(Wykorzystuje w trakcie wykonywania akcji)load_plugin_textdomain()Można stworzyć funkcję do ładowania plików językowych. Do tego celu można użyć narzędzi takich jak Poedit..potPliki szablonów i….po/.moTłumacz dokumentó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.
- Przewodnik po budowaniu stron internetowych: Od zera do opanowania całego procesu rozwoju współczesnych witryn internetowych
- 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