Wstęp do rozwoju pluginów dla WordPress: Stworzenie twojego pierwszego rozszerzenia funkcjonalnego od zera

3 minuty na przeczytanie.
2026-03-11
2026-06-04
1,934
Zarabiam prowizję, gdy robisz zakupy poprzez poniższe linki, bez żadnych dodatkowych kosztów dla Ciebie.

Czemu warto rozwijać dodatki (plugi) do WordPress?

WordPress, jako najpopularniejszy na świecie system do zarządzania treścią, dzięki swej wyjątkowej rozszerzalności jest w stanie spełniać różnorakie wymagania użytkowników. Siła tej rozszerzalności wynika w dużej mierze z jego architektury bazującej na wtyczkach (plug-inach). Rozwoj własnych wtyczek daje wolność od ograniczeń wynikających z dostępnych rozwiązań i umożliwia dokładne dostosowanie funkcji witryny do specyficznych potrzeb Twoich lub Twoich klientów. Bez względu na to, czy chodzi o dodanie prostego elementu interfejsu (np. krótkiego koda) czy o stworzenie złożonego panelu administracyjnego, wtyczki umożliwiają oddzielenie logiki funkcji od wyglądu witryny (tematu), co gwarantuje, że aktualizacje tematu nie wpłyną na działanie dodanych elementów.

Z punktu widzenia nauki, zrozumienie rozwoju wtyczek (pluginów) jest koniecznym krokiem na drodze do głębszego poznania istoty WordPress. Dzięki temu poznasz dwie kluczowe koncepcje: aktywne haczyki (Action Hooks) i filtrowane haczyki (Filter Hooks), które stanowią fundament modułowości i rozszerzalności WordPress. Opanowanie umiejętności tworzenia wtyczek nie tylko poprawi twoje techniczne umiejętności, ale także otworzy przed tobą nowe możliwości karierowe oraz pozwoli stworzyć sprzedawane produkty cyfrowe.

Przygotowania przed rozpoczęciem rozwoju

Przed napisaniem pierwszego linii kodu potrzebny jest odpowiedni środowisko rozwoju. Zwykle składa się ono z lokalnego serwera (np. Local by Flywheel, XAMPP lub MAMP), edytora kodu (np. VS Code, PhpStorm) oraz witryny testowej z zainstalowanym WordPressem. Upewnij się, że wersja PHP w twoim środowisku testowym jest identyczna z wersją używaną w produkcji, aby uniknąć problemów z kompatybilnością.

Polecamy lekturę. Opanowanie podstawowych umiejętności WordPressa: kompletny praktyczny przewodnik od budowy do optymalizacji

Zrozumienie podstawowej struktury pluginu

Najprostszzy plugin do WordPressa może składać się z jednego tylko pliku PHP. Jednak dobrze zorganizowany plugin zawiera zwykle kilka katalogów i plików, co zapewnia lepszą strukturę i łatwiejszą obsługę. Typowy katalog pluginu może mieć następującą strukturę:
– Główny plik rozszerzenia (na przykład…) my-first-plugin.phpTo jest punkt wejścia do pluginu, zawierający informacje o jego strukturze (header).
- includes/ Katalog: zawiera pliki z klasyfikacją kluczowych funkcji lub metod.
- admin/ Katalog: zawiera kod związany z interfejsem administracyjnym na stronie serwera.
- public/ Katalog: zawiera kod przeznaczony do frontendu witryny internetowej.
- assets/ Katalog: zawiera pliki JavaScript, CSS oraz inne statyczne zasoby, takie jak zdjęcia.
- languages/ Katalog: zawiera pliki z tłumaczeń międzynarodowych (.po/.mo).

UltaHost – hostingu dla stron WordPress
Gwarancja zwrotu pieniędzy w ciągu 30 dni, nieograniczony przepustowość sieci i dostęp do bazy danych, bezpłatna ochrona przed atakami typu DDoS. Promocja: 50% przy zakupie na 3 lata.

Niezbędne informacje o nagłówkach plików z rozszerzeniami (plug-in headers)

Każdy plugin WordPress musi zawierać standardowe komentarze na początku swojego głównego pliku PHP – to kluczowe wymaganie, aby WordPress mógł rozpoznać ten plugin. Poniżej znajduje się najprostszzy przykład:

<?php
/**
 * Plugin Name:       我的第一个插件
 * 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
 * Domain Path:       /languages
 */

Wśród nichPlugin Name Wszystkie pola oznaczone jako „obowiązkowe” muszą zostać wypełnione; pozostałe są opcjonalne. Aby jednak zabezpieczyć kompletność i łatwość konserwacji pluginu, zaleca się uzupełnić wszystkie dostępne informacje.Text Domain Wykorzystywane do celów internacjonalizacji.Domain Path Wskazuje katalog z plikami językowymi.

Stwórz swoje pierwsze rozszerzenie: prostą funkcję powitania.

Zróbmy to na przykładzie z dowolnego projektu. Stworzymy plugin, który wyświetlać będzie przykazaną przez użytkownika wiadomość powitania na początku treści artykułu na stronie internetowej.

Tworzenie plików i katalogów dla wtyczek

Najpierw, w katalogu zainstalowanego WordPressa: wp-content/plugins/ W folderze utwórz nowy folder o nazwie… my-greeting-pluginNastępnie w tym folderze utwórz główny plik PHP o nazwie… my-greeting-plugin.phpKopiej również powyżej podane informacje o nagłówku pliku z dodatkiem (plugin header) i wklej je w odpowiednie miejsce.

Polecamy lekturę. Jak wybrać i opracować wysokiej jakości wtyczkę WordPress: od podstaw do zaawansowanych technik.

Użyj haczyków („hooks”) do dodawania funkcji.

WordPress funkcjonuje za pomocą systemu hooków. Aby dodać informacje przed treścią artykułu, należy użyć odpowiednich hooków. the_content Filtry hooki. W swoim głównym pliku pluginu dodaj następującą funkcję oraz wywoływanie hooków:

/**
 * 在文章内容前添加问候语
 *
 * @param string $content 原始的文章内容。
 * @return string 修改后的文章内容。
 */
function mgp_add_greeting_to_content( $content ) {
    $greeting_text = get_option( 'mgp_greeting_text', '欢迎阅读!' ); // 从数据库获取设置,默认为“欢迎阅读!”
    $custom_greeting = '<div class="mgp-greeting"><p><strong>'`.esc_html($greeting_text)`.'</strong></p></div>';

// 仅对主循环中的单篇文章页面生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $custom_greeting . $content;
    }
    return $content;
}
// 将函数挂载到 `the_content` 过滤器
add_filter( 'the_content', 'mgp_add_greeting_to_content' );

Ten kod definiuje funkcję. mgp_add_greeting_to_contentPrzyjmuje treść artykułu i dodaje do niej kontener typu DIV z powitaniem na początku. add_filter() Funkcje – przyłączymy nasze własne funkcje do WordPress. the_content Filtr jest włączony. Logika znajdująca się wewnątrz funkcji zapewnia, że powitanie wyświetla się tylko w głównym cyklu obsługi jednego artykułu na stronie frontendowej, nie wpływając na strony archiwów ani na inne elementy interfejsu.

Stworzenie prostej strony z ustawieniami administracyjnymi

Aby użytkownicy mogli sami dostosować tekst powitania, musimy dodać prostą stronę konfiguracji. To wymaga użycia API menadżera WordPress. W pliku głównego pluginu dodaj następujący kod:

hosting.com Hosting współdzielony
Wysoka wydajność dzięki procesorom AMD EPYC, pamięci masowej NVMe SSD i LiteSpeed, wewnętrzne wsparcie ekspertów 24/7, zaawansowane środki bezpieczeństwa, w tym SSL, brute force, ochrona przed złośliwym oprogramowaniem i DDoS, oszczędność do 73%
/**
 * 注册插件设置菜单和页面
 */
function mgp_register_admin_menu() {
    add_options_page(
        '问候语设置',           // 页面标题
        '问候语插件设置',       // 菜单标题
        'manage_options',      // 所需权限
        'my-greeting-plugin',  // 菜单slug
        'mgp_render_settings_page' // 用于输出页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mgp_register_admin_menu' );

/**
 * 渲染设置页面的内容
 */
function mgp_render_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Ustawienia pluginu do komunikatorów („Greeting Message Plugin Settings”)</h1>
        <form method="post" action="/pl/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'mgp_settings_group' ); // 输出设置组和非ce字段
            do_settings_sections( 'my-greeting-plugin' ); // 输出设置区域
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    <?php
}

/**
 * 初始化插件设置
 */
function mgp_initialize_settings() {
    // 注册一个设置
    register_setting(
        'mgp_settings_group', // 设置组名
        'mgp_greeting_text',  // 选项名,对应数据库中的键
        array( // 可选的验证回调函数
            'sanitize_callback' => 'sanitize_text_field',
            'default' =&gt; '欢迎阅读!'
        )
    );

// 添加一个设置区域
    add_settings_section(
        'mgp_main_section',           // 区域ID
        '主要设置',                   // 区域标题
        null,                         // 区域介绍的回调函数(此处不需要)
        'my-greeting-plugin'          // 页面slug
    );

// 向区域中添加一个字段
    add_settings_field(
        'mgp_greeting_field',         // 字段ID
        '问候语文本',                 // 字段标签
        'mgp_greeting_field_callback', // 用于输出字段HTML的回调函数
        'my-greeting-plugin',         // 页面slug
        'mgp_main_section'            // 区域ID
    );
}
add_action( 'admin_init', 'mgp_initialize_settings' );

/**
 * 渲染问候语文本输入字段
 */
function mgp_greeting_field_callback() {
    $greeting = get_option( 'mgp_greeting_text', '欢迎阅读!' );
    echo '<input type="text" name="mgp_greeting_text" value="' . esc_attr( $greeting ) . '" class="regular-text" />'echo '<p class="description">Ten tekst będzie wyświetlany na dole każdego artykułu na twoim blogu.</p>';
}

Ten kod wykonał następujące zadania:
1. Użyj add_action( 'admin_menu', ... ) Dodano podmenu do menu “Ustawienia”.
2. Użyj add_action( 'admin_init', ... ) Ustawienia inicjalizacyjne obejmują opcję rejestracji bazy danych, obszar dla konfiguracji oraz pole wejściowe.
3. Zdefiniowano funkcje do ustawiania formularzy i pol na stronie renderowania.
Teraz loguj się do panelu administracyjnego WordPress i w menu “Ustawienia” znajdziesz opcję “Ustawienia pluginu powitania”. Tam możesz zmienić tekst powitania, a efekty zmian będą widoczne natychmiast w tekstach publikowanych na stronie internetowej.

Najlepsze praktyki i zaawansowane metody rozwoju dodatków (plug-inów)

Po ukończeniu implementacji podstawowych funkcji stosowanie najlepszych praktyk pozwoli twojemu pluginowi stać się bardziej profesjonalnym, bezpiecznym i łatwiejszym w obsłudze.

Bezpieczeństwo to najważniejszy priorytet.

Nigdy nie powinniśmy ufać wprowadzonym danym przez użytkowników. W pluginach wszystkie dane pochodzące z zewnątrz muszą być sprawdzone i zweryfikowane, aby uniknąć potencjalnych problemów. $_GET$_POST$_COOKIE Wszelkie dane pochodzące z bazy danych lub wynikające z jej zapytań muszą zostać sprawdzone, oczyszczone lub uwzględnione pod kątem specjalnych wymagań (np. escape) przed ich wyświetleniem lub użyciem.
– Wykonaj escape: użyj esc_html()esc_attr()esc_url()wp_kses_post() Funkcje takie jak…
– Oczyszczenie wprowadzonych danych: użyj… sanitize_text_field()sanitize_email()intval() Funkcje takie jak…
– Bezpieczeństwo bazy danych: stosowanie odpowiednich metod i zabezpieczeń. $wpdb Można wykonywać wyszukiwania za pomocą metod klasy lub innych dostępnych zasobów. prepare() Metody parametryzacji zapytań są stosowane, aby zapobiec atakom typu SQL injection.
– Sprawdzenie upoważnień: Przed korzystaniem z funkcji na stronie zarządzania lub wykonywaniem operacji wymagających upoważnień, upewnij się, że masz odpowiednie pozwolenia. current_user_can() Sprawdź uprawnienia użytkownika i użyj je zgodnie z wymaganiami. check_admin_referer() Weryfikacja pola „nonce” zapobiega falsyfikacji żądań między witrynami (Cross-Site Request Forgery, CSRF).

Polecamy lekturę. Opanuj kluczowe umiejętności stosowane w WordPressie i stwórz profesjonalną stronę internetową, która łączy w sobie funkcjonalność z estetyką.

实现国际化(i18n)

Aby twoje wtyczki były dostępne dla użytkowników z całego świata, konieczne jest wsparcie wielojęzycznych tłumaczeń. To wymaga użycia funkcji tłumaczeniowych w WordPress do formatowania wszystkich tekstów skierowanych do użytkowników. Zmienij wyświetlanie tekstów w obecnym kodzie.

// 在插件头信息中已定义 Text Domain: my-first-plugin
$greeting_text = get_option( 'mgp_greeting_text', __( '欢迎阅读!', 'my-first-plugin' ) );

// 在管理菜单函数中
add_options_page(
    __( '问候语设置', 'my-first-plugin' ),
    __( '问候语插件设置', 'my-first-plugin' ),
    'manage_options',
    'my-greeting-plugin',
    'mgp_render_settings_page'
);

Następnie możesz użyć narzędzia takiego jak Poedit, aby wybrać ciągi tekstowe z źródłowego kodu pluginu i wygenerować je. .pot Pliki szablonów, które umożliwiają twórcy tłumaczeń tworzenie tekstów w różnych językach. .po.mo Plik należy umieścić w folderze z pluginem. /languages Spis treści.

Hosting współdzielony InterServer
Hosting współdzielony $2.50 USD miesięcznie, pierwszy miesiąc $0.1 USD kod promocyjny tryinterserver, 461 skryptów aplikacji w chmurze, instalacja jednym kliknięciem.

Organizacja kodu i optymalizacja wydajności

Wraz z rozwojem funkcjonalności wtyczek rozdzielanie kodu na różne pliki jest rozsądnym krokiem. Używanie programowania obiektowego (OOP) i klas do organizacji kodu poprawia jego czytelność i powtarzalność. Co do zasobów (CSS, JS), warto zastosować odpowiednie metody zarządzania nimi. wp_enqueue_style()wp_enqueue_script() Funkcja jest używana we właściwym momencie (w odpowiednim „hooku”). wp_enqueue_scriptsadmin_enqueue_scriptsZawartości są ładowane według potrzeb i z określoną wersją zależności. Unikaj bezpośrednich, kosztownych operacji wyszukiwania w bazie danych w pluginach; zamiast tego rozważaj użycie API Transients do cacheowania niekluczowych danych.

Podsumowanie.

Zaczęłeś od stworzenia prostego pliku w języku PHP i dodania standardowych informacji dotyczących nagłówków pluginów, a potem przerodziłeś się na wykorzystanie aktywnych (“action”) i filtrowych („filter”) hooków w łańcu życia WordPressa. Następnie przygotowałeś interfejs administracyjny oraz stosowałeś najlepsze praktyki związane z bezpieczeństwem i internationalizacją. Choć ten „plugin powitania” jest prosty, pokazuje on w pełni kluczowe etapy rozwoju pluginów: planowanie funkcji, przyłączenie się do odpowiednich hooków, obsługiwanie danych oraz tworzenie interfejsu użytkownika. Pamiętaj, że ciągłe studiowanie oficjalnych dokumentacji, analiza kodu wysokiej jakości pluginów otwartego źródła oraz regularna praktyka są najlepszymi sposobami na rozwijanie swych umiejętności w tej dziedzinie. Twój następny plugin może rozwiązać jakiś bardziej złożony i ciekawy problem w praktyce.

FAQ – najczęściej zadawane pytania.

Jaki minimalny liczba plików jest wymagany do działania wtyczki (pluginu) dla WordPress?

Aby stworzyć pełnowartościowy plugin dla WordPress, wystarczy co najmniej jedna plik PHP. Wystarczy, aby na początku tej pliki znajdowały się poprawne informacje o pluginie (zwane „headerem”). Plugin NameWtedy WordPress będzie mogły go rozpoznać i aktywować w liście dostępnych wtyczek w tle systemu. W tym pliku można umieścić cały kod potrzebny do realizacji funkcji pluginu, a także kod potrzebny do obsługi jego witryny administracyjnej itd. Oczywiście, w przypadku złożonych pluginów zaleca się rozdzielenie kodu na kilka plików i katalogów, aby ułatwić ich utrzymanie.

Jak uniknąć konfliktów pomiędzy pluginami, które rozwijam, a innymi pluginami?

Kluczem uniknięcia konfliktów jest używanie unikalnych prefiksów przy nazawaniu wszystkich funkcji, klas, zmiennych, nazw opcji oraz hooków do działań/filtrów. Na przykład, nie używaj… add_greeting() Takie ogólne nazwy funkcji powinny być zastąpione nazwami bardziej specyficznymi i jasno określającymi ich zadanie. mgp_add_greeting() Takie imiona (w których) mgp To skrót nazwy twojego pluginu. Podobnie dla opcji przechowywanych w bazie danych należy używać unikalnego prefiksu. mgp_greeting_textTo może maksymalnie zmniejszyć możliwość konfliktów nazw przestrzeni.

Co należy zrobić podczas aktywacji i dezaktywacji wtyczek?

Gdy włączony jest dodatek, zwykle konieczne jest wykonyanie kilku jednorazowych działań, np. sprawdzenie wersji PHP lub WordPress, tworzenie tabel w bazie danych, inicializacja standardowych ustawień itd. To można zrobić poprzez… register_activation_hook() Funkcja może zostać implementowana w taki sposób. Podobnie…register_deactivation_hook() Służy do określenia działań wykonywanych w momencie wyłączenia wtyczki, np. usunięcia zapisanych zadań planowanych. Jednak należy pamiętać, że hooki wyłączające nie są przeznaczone do usuwania danych – czyszczenie danych zwykle przeprowadza się za pomocą hooków odinstalowujących lub przez użytkownika.

Jak dodać stronę ustawień do mojego pluginu?

Aby dodać stronę ustawień dla pluginu, konieczne jest wykorzystanie dwóch API WordPress: API menu i API ustawień. Najpierw należy… add_action( 'admin_menu', ... ) Zmontuj funkcję i użyj jej wewnątrz tej funkcji. add_menu_page()add_submenu_page() Zarejestruj stronę menu najwyższego poziomu lub poziomu podległego. Następnie, użyj… add_action( 'admin_init', ... ) Zainstaluj drugą funkcję i użyj jej w swoim kodzie. register_setting()add_settings_section()add_settings_field() Następnie należy określić konkretnie opcje ustawień oraz pola formularza. Na koniec należy napisać funkcję zwrotną (callback), która będzie renderować HTML formularza na stronie z ustawieniami.

Jaki wersję WordPressu musi być kompatybilny mój plugin?

Zależy to od Twojej grupy celowych użytkowników. Zwykle zaleca się kompatybilność z ostatnimi 3–4 najpopularniejszymi wersjami WordPress. Możesz to uwzględnić w informacjach umieszczonej w nagłówku pliku rozszerzenia (plugin header). Requires at least: Należy określić minimalną wersję WordPressu, która jest wymagana. Podczas rozwoju należy unikać używania funkcji, które są dostępne wyłącznie w najnowszych wersjach WordPressu. function_exists() Konieczne jest wykonywanie sprawdzeń warunkowych, aby zapewnić dostępność alternatywnych rozwiązań zgodnych z wcześniejszymi wersjami systemu WordPress. Ponadto regularne testy na starszych wersjach WordPress są skutecznym sposobem na utrzymanie kompatybilności.