Zrozumienie podstawowej architektury pluginów WordPress
Przed rozpoczęciem pisania kodu istotne jest zrozumienie podstawowej struktury pluginów WordPress. Plugin w istocie składa się z jednego lub kilku plików PHP, które znajdują się w określonym miejscu w strukturze witryny WordPress./wp-content/plugins/W katalogu można rozszerzać funkcje podstawowe WordPressa za pomocą API (Application Programming Interface) dostępnego w tym systemie. Serce każdego pluginu stanowi główny plik, który musi zawierać określone komentarze w nagłówkach pliku, aby WordPress mógł go rozpoznać i zarządzać nim.
Skład głównego pliku pluginu
Punkt wejścia do pluginu to zwykle plik PHP o tym samym nazwisku co plugin. Na początku tego pliku musi znajdować się standardowa komentarzowa nota, która służy do podania metadanych do WordPress. Ta nota musi zawierać co najmniej nazwę pluginu, opis, wersję, autora oraz informacje o licencji. Na przykład, dla pluginu o nazwie “My Custom Widget” plik główny będzie zawierać takie informacje.my-custom-widget.phpZaczęcie może wyglądać następnie:
<?php
/**
* Plugin Name: My Custom Widget
* Plugin URI: https://www.example.com/my-custom-widget
* Description: 这是一个用于演示的自定义小工具插件。
* Version: 1.0.0
* Author: Your Name
* Author URI: https://www.example.com
* License: GPL v2 or later
* Text Domain: my-custom-widget
*/ W tym komentarzu “Plugin Name” to jedyny obowiązkowy polu, które WordPress wymaga, by rozpoznać plugin. Pozostałe pola są opcjonalne, ale dla poprawnej struktury i łatwiejszej konserwacji pluginu zaleca się je wypełnić. Pole “Text Domain” służy do realizacji funkcji internacionalizacji i jest kluczowe dla dodania wsparcia w kilku językach.
Polecamy lekturę. Przewodnik po rozwoju pluginów dla WordPressa: budowanie modułów funkcjonalnych od zera。
Best Practices for the Structure of Plugin Directories
Dla prostych wtyczek wystarczyć może jeden plik PHP. Jednak w przypadku wtyczek złożonych konieczna jest jasna, modułowa struktura katalogów. Typowy katalog profesjonalnej wtyczki może zawierać następujące części:
- Main file
plugin-name.phpPlik instrukcji dla wtyczki, zawierający komentarze na początku pliku oraz kluczową logikę lub elementy potrzebne do jej uruchomienia. includes/或src/Katalog służy do przechowywania kluczowych plików z kodem w języku PHP oraz modułów funkcjonalnych.admin/Katalog zawiera wyłącznie kod oraz strony związane z interfejsem administracyjnym na stronie serwera („backend”).public/或frontend/Katalog zawiera logikę odpowiedzialną za wyświetlanie treści na stronie frontowej witryny internetowej.assets/Katalog zawiera statyczne zasoby, takie jak JavaScript, CSS oraz zdjęcia.languages/Katalog, w którym znajdują się pliki z tłumaczeń międzynarodowych (.po/.mo).uninstall.phpMożliwy, ale zalecany plik, który służy do czyszczenia bazy danych oraz innych danych po usunięciu przez użytkownika dodatków (plug-inów).
Taki strukturalny sposób organizacji kodu nie tylko ułatwia jego konserwację i współpracę w zespole, ale także odpowiada najlepszym praktykom w dzisiejszym PHP programowaniu.
Opanuj kluczowe narzędzia do rozwoju: akcje (actions) i hooki filtrów (filter hooks).
Podstawa filozofii rozwoju pluginów dla WordPress jest “mechanizm hooków” (“Hook System”). Dzięki temu mechanizmowi twoje pluginy mogą zostać włączone do standardowego procesu działania WordPress w określonych momencach, umożliwiając modyfikację lub dodawanie nowych funkcji bez konieczności bezpośredniego edycji kodu źródłowego platformy. Hooki są podzielone na dwa typy: hooki akcji (Action Hooks) i hooki filtrów (Filter Hooks).
Używanie aktywnych háków (action hooks)
Aktywnie działające „haki” (ang. action hooks) wykonywają twój własny kod w momencie wystąpienia określonych zdarzeń. Na przykład, po opublikowaniu artykułu lub po inicjalizacji menu w panelu administracyjnym.add_action()Funkcja umożliwia “przyczepienie” twojej funkcji do jakiegoś „haka akcji” (action hook).
Przyjmiemy, że chcesz automatycznie dodawać oświadczenie o prawach autorskich na końcu każdego artykułu. Możesz to zrobić za pomocą odpowiednich narzędzi lub skryptów.the_contentTen filtr (zwróć uwagę – to w rzeczywistości filtr, ale działanie jest podobne do innych elementów tego typu) jest przykładem narzędzia, które może być użyte do zapisywania logów po logowaniu użytkownika. Poniżej znajduje się przykład użycia „hooków akcji” (action hooks) w tym celu.wp_footerPrzykład wyświetlania informacji w nagłówku strony internetowej:
Polecamy lekturę. Opanowanie rozwoju pluginów dla WordPress: budowanie własnych funkcji od zera。
Funkcja myplugin_add_footer_text() {
echo '<p style="text-align:center;">Dziękujemy za korzystanie z tej strony!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); Gdy WordPress wykonuje…wp_footerW momencie wykonywania tego działania (zwykle w ramach tematu…)footer.phpWywołanie funkcji w środowisku Node.jswp_footer()Gdy zostanie wywołana ta funkcja, zostaną uruchomione wszystkie funkcje zainstalowane na niej, włącznie z tą, którą właśnie definiowaliśmy.myplugin_add_footer_text。
Używanie filtrów hooków
Filtry hooki są używane do modyfikacji danych. Przyjmują jedną zmienną, która po przetworzeniu przez twoją funkcję musi zostać powrócona w postaci zmienionej. To jeden z najpotężniejszych sposobów na zmianę standardowego zachowania WordPress.add_filter()Funkcja jest montowana (tj. przyłączana do odpowiedniej struktury programu).
Na przykład, jeśli chcesz zmienić długość opisu artykułu, możesz to zrobić za pomocą odpowiednich narzędzi lub procedur.excerpt_lengthFiltr:
function myplugin_custom_excerpt_length( $length ) {
// 将默认的55个单词改为20个单词
return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' ); Kolejnym częstym przypadkiem użycia jest modyfikacja wyświetlanych treści artykułów. Poniższy kod dodaje przekaz przed każdym tekstem artykułu:
function myplugin_add_content_notice( $content ) {
if ( is_single() ) {
$notice = '<div class="notice">Ten tekst jest oryginalnym materiałem; przy jego reprodukcji konieczne jest podanie źródła.</div>';
$content = $notice . $content;
}
return $content;
}
add_filter( 'the_content', 'myplugin_add_content_notice' ); Rozumienie i biegłe używanie różnych „hooków” (zdarzeń programowych w WordPress) jest kluczowym elementem na drodze do stania się efektywnym programistą pracującym z platformą WordPress. Oficjalny przewodnik po dodatkach dla WordPress zawiera pełny spis wszystkich dostępnych „hooków”.
Tworzenie interfejsu administracyjnego dla backendu pluginu
Większość pluginów wymaga strony konfiguracji, aby administratorzy stron internetowych mogli ustawić odpowiednie opcje. WordPress oferuje bogatą API, umożliwiającą tworzenie estetycznych i standardowych stron zarządzania w tle witryny.
Polecamy lekturę. Opanowanie rozwoju wtyczek dla WordPress: stworzenie swojego pierwszego modułu rozszerzającego od zera。
Tworzenie najwyższego menu i strony zarządzania
Użyjadd_menu_page()Funkcja umożliwia dodanie elementu menu najwyższego poziomu w bocznej nawigacji twojego pluginu, wraz z jego odpowiednią stroną ustawień. Aby użyć tej funkcji, konieczne jest określenie następujących parametrów: nagłówka strony, nagłówka menu, uprawień, nazwy alternatywnych menu, funkcji wywoływanych po kliknięciu na elementach menu itd.
Poniższy przykład kodu tworzy stronę menu najwyższego poziomu o nazwie “Moje ustawienia pluginu”:
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限(通常为manage_options,仅管理员可见)
'myplugin-settings', // 菜单别名(slug),用于URL
'myplugin_settings_page_html', // 用于渲染页面内容的回调函数
'dashicons-admin-generic', // 菜单图标(使用Dashicons)
80 // 菜单位置
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// 定义渲染页面内容的回调函数
function myplugin_settings_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
// 输出设置字段、非ces等(需要与settings API配合使用)
settings_fields( 'myplugin_options' );
do_settings_sections( 'myplugin-settings' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="pl"/></form>
</div>
<?php
} Bezpieczne obsługiwanie opcji za pomocą API konfiguracji
Używanie formularzy do bezpośredniego wysyłania i obsługi danych niesie ze sobą ryzyka bezpieczeństwa. API Settings w WordPressu oferuje bezpieczny i standardowy sposób na rejestrację, weryfikację oraz zapisowanie ustawień. Automatycznie zajmuje się weryfikacją danych (np. za pomocą „nonce”), sprawdzeniem upoważnień użytkowników oraz czyszczeniem wprowadzonych informacji.
Używanie API Settings zwykle składa się z trzech kroków:
1. Ustawienia rejestracji: użyjregister_setting()Definiuj zbiór opcji oraz funkcje zwrotne (callback) służące do ich weryfikacji.
2. Dodaj blok ustawień: użyjadd_settings_section()Dodaj blok na stronę.
3. Dodaj pole ustawień: użyj…add_settings_field()Dodaj konkretnie pola wejściowe wewnątrz bloku.
Poniżej znajduje się uproszczone przykład pokazujące, jak zarejestrować pole tekstowe do wyboru:
function myplugin_settings_init() {
// 1. 注册一个设置选项组
register_setting( 'myplugin_options', 'myplugin_options_field', array(
'sanitize_callback' => 'myplugin_sanitize_text_field' // 清理函数
) );
// 2. 添加一个设置区块
add_settings_section(
'myplugin_section_main',
'主要设置',
null, // 可选的区块描述回调函数
'myplugin-settings'
);
// 3. 为区块添加一个字段
add_settings_field(
'myplugin_field_text',
'示例文本',
'myplugin_field_text_html', // 渲染字段HTML的回调函数
'myplugin-settings',
'myplugin_section_main',
array( 'label_for' => 'myplugin_field_text' )
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 字段渲染函数
function myplugin_field_text_html() {
$options = get_option( 'myplugin_options_field' );
$value = isset( $options['text'] ) ? $options['text'] : '';
?>
<input type="text" id="myplugin_field_text" name="myplugin_options_field[text]" value="<?php echo esc_attr( $value ); ?>" class="regular-text">
<?php
}
// 数据清理函数
function myplugin_sanitize_text_field( $input ) {
$sanitized_input = array();
if ( isset( $input['text'] ) ) {
$sanitized_input['text'] = sanitize_text_field( $input['text'] );
}
return $sanitized_input;
} Rozwijanie funkcji frontendowych wtyczek oraz tworzenie krótkich kodów
Dodatki nie ograniczają się tylko do obszaru backendu; co więcej, są przydatne również dla frontendu witryny. Poza wcześniej wspomnianą możliwością modyfikacji treści za pomocą „hooków”, shortcode’y stanowią potężne narzędzie umożliwiające dodawanie dynamicznych funkcji redaktorom treści oraz plikom szablonów.
Tworzenie i używanie skrótów kodu
Krótkie kody umożliwiają użytkownikom korzystanie z jednego prostego tagu (na przykład…)[my_gallery]Włączanie złożonych funkcji do artykułów lub stron. Korzystaj z tego.add_shortcode()Funkcja służy do rejestracji krótkiego kodu.
Następny kod tworzy prosty „skrót” (shortcode), który służy do wyświetlania przycisku z dowolnym ustawionym powitaniem:
function myplugin_hello_shortcode( $atts, $content = null ) {
// 解析短代码属性,并提供默认值
$attributes = shortcode_atts(
array(
'name' => '访客',
'color' => 'blue',
),
$atts,
'hello' // 短代码标签
);
// 确保颜色值安全
$color = esc_attr( $attributes['color'] );
$name = esc_html( $attributes['name'] );
// 构建输出
$output = '<button style="background-color: ' . $color . '; padding: 10px; color: white; border: none;">';
$output .= '你好,' . $name . '!';
$output .= '</button>';
// 如果短代码是封闭式的(有内容),则包含内容
if ( ! is_null( $content ) ) {
$output .= '<div>'`. do_shortcode($content)`.'</div>';
}
return $output;
}
add_shortcode( 'hello', 'myplugin_hello_shortcode' ); Użytkownicy mogą korzystać z tego w edytorze artykułów w następujący sposób:
* [hello name="张三" color="red"]
* [hello]点击我![/hello]
Dodaj do pluginu własne narzędzia („custom tools”).
Widget to blok zawartości umieszczaony w nagłówku lub stopcu strony w WordPressie. Aby stworzyć własną klasę widgeta, należy ją rozszerzyć (ang. „extend”).WP_WidgetKlasa bazowa, w której implementowane są kilka kluczowych metod: metod konstruktora, metoda wyświetlania danych na stronie użytkownika oraz metoda aktualizacji formularza.
Stworz prosty narzędzie, które wyświetla nagłówki najnowszych artykułów:
class Myplugin_Recent_Posts_Widget extends WP_Widget {
// 构造方法:定义小工具ID、名称和描述
public function __construct() {
parent::__construct(
'myplugin_recent_posts',
'我的插件:近期文章',
array( 'description' => '显示您网站的最新文章列表。' )
);
}
// 前端显示逻辑
public function widget( $args, $instance ) {
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
$posts = get_posts( array( 'numberposts' => $instance['number'] ?: 5 ) );
echo '<ul>';
foreach ( $posts as $post ) {
setup_postdata( $post );
echo '<li><a href="/pl/' . get_permalink( $post->ID ) . '/">' . get_the_title( $post->ID ) . '</a></li>';
}
wp_reset_postdata();
echo '</ul>';
echo $args['after_widget'];
}
// 后台小工具表单
public function form( $instance ) {
$title = ! empty( $instance['title'] ) ? $instance['title'] : '近期文章';
$number = ! empty( $instance['number'] ) ? $instance['number'] : 5;
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">Tytuł:</label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>">Wyświetlić liczbę artykułów:</label>
<input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="number" min="1" value="<?php echo esc_attr( $number ); ?>">
</p>
<?php
}
// 更新小工具设置
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';
$instance['number'] = ( ! empty( $new_instance['number'] ) ) ? absint( $new_instance['number'] ) : 5;
return $instance;
}
}
// 注册这个小工具
function myplugin_register_widget() {
register_widget( 'Myplugin_Recent_Posts_Widget' );
}
add_action( 'widgets_init', 'myplugin_register_widget' ); Podsumowanie.
Rozwoj wtyczek dla WordPress polega na połączeniu umiejętności programowania w języku PHP z głębokim zrozumieniem architektury serwisu WordPress. Początkiem sukcesu jest stworzenie struktury plików zgodnej z standardami oraz przygotowanie odpowiedniej nagłówki głównego pliku. Następnie kluczowym elementem jest doskonałe opanowanie mechanizmów akcji (actions) i filtrów (filters), które umożliwiają wpływanie na proces obsługi danych w dokładnie wybranym momencie. Aby zapewnić użytkownikom przyjazny interfejs konfiguracji, niezbędne jest wykorzystanie API Admin Menu i Settings API, aby stworzyć bezpieczny i standardowy interfejs administracyjny. Końcowym etapem jest implementacja krótkich kodów i własnych narzędzi, które umożliwiają bezproblemowe włączenie funkcji wtyczki do treści i wyglądu witryny, oferując użytkownikom większą swobodę w organizacji prezentacji treści. Dodróżując tych zasad, można systematycznie tworzyć wydajne, dobrze zorganizowane i łatwe w utrzymaniu wtyczki dla WordPress.
FAQ – najczęściej zadawane pytania.
Jakie są wymagania przedsiębiorcze, by rozpocząć rozwój wtyczek dla WordPress?
Konieczne jest posiadanie solidnych umiejętności programowania w PHP, a także podstawowego znania z HTML, CSS i JavaScript. Znajomość zasad programowania obiektowego (OOP) będzie przydatna przy tworzeniu większych pluginów. Ponadto niezbędne są lokalne środowiska rozwoju, takie jak Local by Flywheel, XAMPP lub MAMP, oraz narzędzia do edycji kodu, np. VS Code lub PhpStorm.
Jak zapewnić, że moje stworzone dodatki (plug-iny) są bezpieczne i wydajne?
W zakresie bezpieczeństwa: zawsze sprawdzaj i filtruj dane wprowadzane przez użytkowników, wykorzystując wbudowane funkcje WordPress.sanitize_text_field(), esc_html(), wp_kses()Itp. Podczas obsługi formularzy i żądań Ajax konieczne jest stosowanie weryfikacji typu nonce. Można używać wcześniej zdefiniowanych klas do operacji z bazą danych w WordPress (np.$wpdbAby uniknąć ataków typu SQL injection, należy stosować odpowiednie zabezpieczenia. Co do wydajności: skrypty i style należy ładować wyłącznie w momencie ich konieczności (z użyciem odpowiednich mechanizmów).wp_enqueue_script()Ustaw zależności i warunki ładowania w sposób rozsądny. Zbieraj wyniki czasochłonnych zapytań w pamięci cache za pomocą API Transients. Unikaj wykonywania dużej liczby niepotrzebnych zapytań do bazy danych podczas inicjalizacji pluginu.
Jak powinienem debugować i testować swój plugin?
Podczas etapu rozwoju prosimy o…wp-config.phpUwolniono włączenie w pliku.WP_DEBUG和WP_DEBUG_LOGTo umożliwi zapisywanie błędów i ostrzeżzeń PHP do pliku logów, co ułatwi rozwiązywanie problemów. Aby sprawdzić żądania internetowe oraz błędy w JavaScript, użyj narzędzi deweloperskich w przeglądarzu. Dla debugowania logiki kodu…error_log()Funkcje i dodatki takie jak “Query Monitor” to doskonałe narzędzia. Koniecznie sprawdź ich działanie na różnych wersjach PHP i WordPress, aby upewnić się o ich kompatybilności.
Jak dodać mojemu pluginowi wsparcie dla różnych języków (internacjonalizację)?
Najpierw należy poprawnie ustawić informacje w komentarzach na początku głównego pliku.Text Domain(Na przykład: „my-plugin-text-domain”). W kodzie wszystkie teksty, które potrzebują tłumaczenia, należy zaznaczyć w odpowiedni sposób.__()lub_e()Zawij funkcję w obiekty typu „function wrapper” i przekaż do niej tekst z twojego pola tekstowego. Następnie użyj narzędzi takich jak Poedit, aby stworzyć wymagany kod..potPliki szablonów, na których bazie generuje się treść w różnych językach..po和.moZrób kopię pliku i umieść ją w pluginie./languages/Spis treści.
Po ukończeniu rozwoju, jak opublikować moje dodatkowe funkcje (plugin)?
Możesz zdecydować się na publikację swojego pluginu w oficjalnym katalogu pluginów WordPress – to najpopularniejszy sposób jego rozpowszechniania. W tym przypadku twoj plugin musi być zgodny z licencją GPL i przejść przez surową kontrolę kodu. Możesz też rozdawać go na swoim własnym blogu lub na stronach marketów third-party. We wszystkich przypadkach konieczne jest udostępnienie jasnych dokumentacji, logów aktualizacji, informacji o kompatybilności oraz ustalenie planu długoterminowego utrzymania i rozwoju pluginu.
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.
- Ekspert SEO pokazuje ci 10 kluczowych technik i metod, które pomogą ci doskonale optymalizować witryny internetowe zbudowane na platformie WordPress.
- 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