Kompletny przewodnik po tworzeniu wtyczek WordPress — twórz profesjonalne wtyczki od podstaw.

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

Podstawy pluginów w WordPressie i środowisko rozwoju

Aby rozwijać pluginy dla WordPress, najpierw trzeba zrozumieć, co to w ogóle jest. Plugin to w istocie jeden lub kilka plików w formacie PHP, zawierających specjalne komentarze w nagłówku, które informują WordPress o celu ich istnienia. Dzięki bogatej API dostępnej w WordPress (takiej jak aktywności hooki, filtry, funkcje bazowych danych itd.) można rozszerzać lub modyfikować funkcje standardowego oprogramowania bez konieczności edycji źródłowego kodu.

Aby zacząć rozwój, potrzebny jest lokalny środowisko rozwoju. Zwykle składa się ono z lokalnego serwera (np. XAMPP, MAMP lub Local by Flywheel), PHP w wersji odpowiadającej wymaganiom WordPress, bazy danych MySQL oraz edytora kodu (np. VS Code, PhpStorm). Zdecydowanie zaleca się robić wszystkie zmiany i testy w lokalnym środowisku, aby uniknąć wpływu na witrynę internetową dostępną online.

Podstawowa struktura plików w pluginie

Najprostszzy plugin może składać się z jednego tylko pliku. Aby jednak kod był jasny i łatwy w utrzymaniu, zaleca się stosować określoną strukturę. Standardowy katalog pluginu może zawierać: plik główny pluginu (na przykład…your-plugin-name.php)、 jedenincludesfolder (zawierający klasy lub funkcje realizujące kluczowe funkcje), jedenadminfolder (zawierający kod dotyczący obsługi w tle), jedenpublicfolder (zawierający kod dotyczący frontendu), jedenassetsfolder (zawierający pliki JavaScript, CSS i zdjęcia), a także opcjonalne foldery z pakietami językowymi i szablonami.

Polecamy lekturę. Pełny przewodnik po rozwoju pluginów dla WordPress: od zera do zaawansowanych praktycznych porad

Główny plik pluginu stanowi punkt wejścia do samego pluginu, a komentarze umieszczone na jego początku są niezbyt ważne. WordPress czyta te komentarze, by wyświetlić informacje o pluginie w panelu administracyjnym.

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.

Utwórz swój pierwszy wtyczkę.

Zacznijmy od klasycznego przykładu “Hello World”, który pomoże ci zapoznać się z podstawowymi procedurami i zasadami tworzenia pluginów.

Napisanie pliku głównego pluginu

Najpierw, w katalogu zainstalowanego WordPressa:wp-content/pluginsW folderze utwórz nowy folder, na przykład nazwany „nowy_folder”.my-first-pluginW tym folderze utwórz plik PHP o nazwiemy-first-plugin.php

Otworź ten plik i wpisz następujący kod. Blok informacji o pluginie (Plugin Header) znajdujący się na początku jest konieczny – informuje WordPress, że mamy do czynienia z pluginem.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个学习插件开发的示例插件,它将在文章内容顶部显示“Hello World!”。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * 在文章内容前添加“Hello World”
 *
 * @param string $content 原始文章内容。
 * @return string 修改后的文章内容。
 */
function mfp_add_hello_world( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $custom_text = &#039;<p style="background-color:#f0f0f0; padding:10px;"><strong>Hello World! To jest mój pierwszy plugin.</strong></p>';
        return $custom_text . $content;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_add_hello_world' );

Po zapisaniu pliku wejdź do panelu administracyjnego WordPress, przejdź na stronę “Dodatki” (Plugins) i powinien pojawić się element “Moja pierwsza dodatka” w liście dostępnych pluginów. Aktywuj go, a potem odwiedź jakąś artykulikę na stronie internetowej – tekst “Hello World!” powinien zostać dodany na początek treści artykułu.

Polecamy lekturę. Nauczymy cię, jak od zera rozwijać pluginy dla WordPress.

Zrozumienie kluczowych elementów w kodzie

Ten kod pokazuje kluczowe koncepty rozwoju w WordPressie: filtry (Filter). Definiowaliśmy jedną funkcję.mfp_add_hello_worldPrzyjmuje treść artykułu.$contentJako parametr, a następnie powrócić zmieniony tekst. Potem użyjemy tego tekstu…add_filter()Funkcja umożliwia montaż tej dostosowanej funkcji w core WordPress.the_contentTen filtr jest włączony (zakładony). WordPress wykona dalsze działania w tych warunkach.the_content()W tym momencie zostaną wykonywane kolejno wszystkie funkcje zainstalowane na tym „haku” (hookie), co umożliwia nam modyfikację wygenerowanego wyniku.

Warunkowe wyrażenia w kodzieis_single() && in_the_loop() && is_main_query()Ma to zapewnić, że nasze zmiany będą wpływać wyłącznie na pojedynczy artykel w głównym wykreszeniu, bez wpływu na stronę z listą artykówłów lub inne części aplikacji. To istotna zasada przy tworzeniu efektywnych i bezpiecznych w obszarze działania (bez negatywnych skutków) dodatków (pluginów).

Podstawowe technologie rozwoju pluginów

Aby stworzyć wydajny, profesjonalny plugin, konieczne jest opanowanie kilku kluczowych API dostępnych w WordPress.

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%

Używanie haków akcji (action hooks) i haków filtrów (filter hooks)

Hooki (“hooki”) stanowią kluczową część architektury pluginów w WordPress. Rozróżniamy dwa typy hooków: akcje (Actions) i filtry (Filters). Hooki typu akcja są aktywowane w określonych momencach wykonywania programu (np. przy publikacji artykułu lub podczas otwarcia panelu administracyjnego), co umożliwia wykonanie określonego kodu. Hooki typu filtrów z kolei umożliwiają modyfikację danych (np. treści artykułu lub nagłówka) przed ich użyciem przez WordPress.

Użyjadd_action()Można użyć tej funkcji do montowania określonych działań. Na przykład, tworzenie tabel w bazie danych w momencie aktywacji wtyczki to często występujący wymóg.

function mfp_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'my_custom_data';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        data varchar(255) NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY (id)
    ) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'mfp_create_custom_table' );

Tu zostało użyte…register_activation_hookTo specjalna funkcja rejestracji, służąca do określenia działań, które mają zostać wykonane podczas aktywacji wtyczki.

Polecamy lekturę. Zaczynamy od zera: dlaczego warto wybrać tworzenie wtyczek do WordPressa?

Tworzenie menu zarządzania oraz strony ustawień

Dostępna strona konfiguracji w tle dla twojego pluginu jest znakomitym elementem profesjonalnego oprogramowania. Można bezpiecznie i standardowo tworzyć takie strony za pomocą API ustawień (Settings API) w WordPress.

Następny kod pokazuje, jak dodać podmenię do głównego menu “Ustawienia”:

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.
// 在管理后台初始化时添加菜单
add_action( 'admin_menu', 'mfp_add_admin_menu' );

function mfp_add_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',        // 所需权限
        'my-plugin-settings',    // 菜单slug
        'mfp_render_settings_page' // 用于渲染页面的回调函数
    );
}

function mfp_render_settings_page() {
    ?&gt;
    <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( 'mfp_settings_group' ); // 输出安全字段
            do_settings_sections( 'my-plugin-settings' ); // 输出设置区域
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    <?php
}

// 初始化设置
add_action( 'admin_init', 'mfp_settings_init' );

function mfp_settings_init() {
    register_setting( 'mfp_settings_group', 'mfp_options' ); // 注册一个设置选项组

add_settings_section(
        'mfp_section_basic',
        '基本设置',
        null,
        'my-plugin-settings'
    );

add_settings_field(
        'mfp_field_text',
        '示例文本框',
        'mfp_field_text_render',
        'my-plugin-settings',
        'mfp_section_basic'
    );
}

function mfp_field_text_render() {
    $options = get_option( 'mfp_options' );
    ?>
    <input type='text' name='mfp_options[text_field]' value='<?php echo esc_attr( $options['text_field'] ?? '' ); ?>'>
    <p class="description">To jest przykład pola tekstowego.</p>
    &lt;?php
}

Bezpieczeństwo pluginów, ich internationalizacja oraz przygotowanie do publikacji

Dodatkowy moduł (plugin), po ukończeniu jego rozwoju, musi zostać zabezpieczony przed atakami, dostosowany do różnych języków oraz dobrze zapakowany, zanim zostanie udostępniony publicznie do używania.

Weryfikacja danych, escape oraz bezpieczeństwo

永远不要信任用户输入或外部数据。所有从$_GET$_POST$_REQUESTDane pochodzące z bazy danych lub innych źródeł muszą zostać sprawdzone (weryfikowane) i poddane procesowi ucieleśnienia (escapowania) przed ich użyciem.

  • Weryfikacja: sprawdzenie, czy dane odpowiadają oczekiwanemu formacie (np. czy jest to adres e-mail, liczba itd.). Do tego celu można użyć funkcji takich jak…is_email()intval()sanitize_text_field()
  • Ucieleśnienie: Podczas wyświetlania danych w HTML, JavaScript lub URL-u upewnij się, że specjalne znaki są poprawnie obsługiwane, aby uniknąć ataków typu XSS. Do tego celu używaj funkcji takich jak…esc_html()esc_js()esc_url()wp_kses_post()

W zapytach SQL należy koniecznie używać…$wpdb->prepare()Metody te służą do przygotowania parametrów w celu zapobiegania atakom typu SQL injection.

Implementacja internacionalizacji wtyczek

Internacjonalizacja (ang. i18n) umożliwia tłumaczenie twojego pluginu na inne języki. Wymaga to dwóch kroków: oznaczenia tekstów, które można przetłumaczyć, oraz załadowania wymaganych tekstów.

Najpierw, w nagłówku pliku z głównym pluginem zostały już określone…Text DomainDomain PathNastępnie, we wszystkich miejscach w pluginie, gdzie występują teksty wymagające tłumaczenia, należy je otoczyć funkcją tłumaczeniową. Na przykład:__('Hello World', 'my-first-plugin')Znaczek używany do wyświetlania tłumaczeń w PHP.esc_html_e('Settings', 'my-first-plugin')Wykorzystuje się do escapeowania i wyświetlania tekstu.

Podczas inicjalizacji wtyczki (na przykład przy jej użyciu…)initAby wykonać tę akcję, konieczne jest załadowanie pliku z tłumaczeniami.

function mfp_load_textdomain() {
    load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'init', 'mfp_load_textdomain' );

Później możesz użyć narzędzia takiego jak Poedit do tworzenia….potPliki szablonów, które służą tłumaczom do tworzenia tekstów..po/.moPliki językowe.

Finalna kontrola i pakowanie

Przed opublikowaniem sprawdź następujące punkty:
1. Kód spełnia standardy kodowania WordPress.
2. Wszystkie funkcje zostały dokładnie przetestowane, w tym również procedury aktywacji, dezaktywacji oraz odinstalowania.register_uninstall_hook„Clean up the data”.)
3. Wszystki kod diagnostyczny oraz tymczasowe wyniki zostały usunięte.
4. Utworzono szczegółowe informacje.readme.txtPlik musi mieć format zgodny z wymaganiami oficjalnych wymagań WordPress i będzie wyświetlony na stronie zawierającej katalog pluginów.
5. Upewnij się, że nazwy katalogów z plikami rozszerzeń oraz nazwy głównych plików są unikalne, aby uniknąć konfliktów z innymi rozszerzeniami.

Na koniec skompresuj cały folder z plikami dodatku w formacie ZIP, a potem możesz go bezpośrednio załadować i zainstalować w panelu administracyjnym WordPress lub wysłać do oficjalnego katalogu dodatków WordPress.

Podsumowanie.

Rozwoj pluginów dla WordPress polega na przekształceniu kreatywnych idei w funkcjonalne rozwiązania, a to wymaga głębokiego zrozumienia podstawowej architektury WordPress (zwłaszcza API hooków). Počynając od stworzenia prostego pluginu typu “Hello World”, można stopniowo uczyć się budowania interfejsów użytkownika, bezpiecznego obsługi danych, interakcji z bazą danych oraz implementacji funkcji internationalizacji. Taki proces rozwoju stanowi standardową drogę dla każdego programisty tworzącego pluginy. Dodawanie pluginów do platformy WordPress jest możliwe tylko w przypadku ich spełnienia wymagań jakości, kompatybilności i bezpieczeństwa. Kluczowymi elementami są stosowanie standardów programowania, np. zasad bezpiecznego kodowania, oraz wykorzystanie interfejsów takich jak API Settings. Poprzez ciągłe ćwiczenia oraz analizę kodu źródłowego i innych wysokiej jakości pluginów, można stworzyć profesjonalne, niezawodne i popularne rozszerzenia dla WordPress.

FAQ – najczęściej zadawane pytania.

Jaka wiedza jest potrzebna, by tworzyć wtyczki do WordPressa?

Konieczne jest posiadanie podstawowych umiejętności programowania w PHP, a także znajomość języków HTML, CSS i JavaScript. Dobrze będzie, jeśli opanujesz podstawowe operacje w WordPressie, np. zarządzanie artykulami, stronami i menu, a także zrozumiesz jego kluczowe concepty, takie jak typy artykułów, kategorie i metadane. Wiedza o bazie danych MySQL również będzie przydatna.

Jak debugować moją wtyczkę WordPress?

Najpierw upewnij się, że nawp-config.phpUwolniono dostęp do pliku.WP_DEBUGWP_DEBUG_LOGDzięki temu informacje o błędach są zapisywane do pliku logów, zamiast być wyświetlone bezpośrednio odwiedzającym. Ponadto można użyć…error_log()Funkcja umożliwia zapisywanie informacji o debugowaniu w logach. W przypadku złożonej logiki najskuteczniejszym sposobem jest wykorzystanie profesjonalnych narzędzi do debugowania, takich jak Xdebug, w połączeniu z IDE (np. PhpStorm).

Jak moje dodatkowe narzędzie (plugin) może komunikować się z usługami third-party (np. API)?

WordPress oferuje potężną API HTTP (na przykład…).wp_remote_get()wp_remote_post()Ten moduł jest przeznaczony do obsługi żądań HTTP i zapewnia lepszą wydajność w porównaniu z wstępnymi funkcjami PHP.file_get_contents()Możliwe, że cURL jest bezpieczniejszy i bardziej kompatybilny. Podczas używania tych funkcji pamiętaj o obsłudze potencjalnych błędów oraz ustawieniu odpowiedniego czasu wykonywania (timeout). W przypadku API, które muszą być często wykonywane, rozważaj użycie mechanizmów cacheowania (np. za pomocą rozwiązań typu „Transients”) w celu poprawienia wydajności.

Jak należy nazwać klasy i funkcje w pluginach, aby uniknąć konfliktów?

Aby uniknąć konfliktów z nazwami funkcji i klas innych wtyczek lub tematów, konieczne jest używanie unikalnego prefiksu. Zwykle zaleca się używać skrócenia lub pełnej nazwy wtyczki jako prefiksu. Na przykład, jeśli twoja wtyczka nosi nazwę “Super Tool”, nazwa funkcji może brzmieć tak:stool_save_data()Nazwy klas mogą być ułożone w taki sposób…Super_Tool_AdminInnym, bardziej nowoczesnym i bezpiecznym sposobem jest używanie przestrzeni nazw (Namespaces) w PHP. Aby to było możliwe, twoje wtyczki (plug-iny) muszą być uruchomiane w środowisku, które wspiera wersję PHP 5.3 lub wyższą.