Krok po kroku twórz swój pierwszy wtyczkę WordPress: od podstaw do zaawansowanego rozwoju.

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

Podstawy rozwoju pluginów dla WordPressa oraz przygotowanie środowiska developmentowego

WordPress pluginy to w istocie zbiory plików w języku PHP, które rozszerzają funkcjonalność WordPressa za pomocą API udostępnionego przez tę platformę. Plugin może być na tyle prosty, że dodaje tylko krótki kod, a może być na tyle złożony, że tworzy całą systemu zarządzania. Przed rozpoczęciem pisania kodu istotne jest zrozumienie jego podstawowej struktury. Każdy plugin musi mieć plik główny, zwykle nazwany tak samo jak plugin. my-first-plugin.phpUwagi umieszczone na początku tego pliku są kluczowe dla identyfikacji wtyczek przez WordPress.

Środowisko rozwoju to klucz do efektywnego pracy. Konieczne jest stworzenie lokalnego środowiska testowego, jak najbardziej zbliżonego do środowiska online. Zaleca się używać pakietów do integracji lokalnych serwerów, takich jak XAMPP, MAMP lub Local by Flywheel. Ponadto upewnij się, że twoj edytor kodu lub środowisko integracyjne (IDE) obsługuje wyróżnianie syntaxu PHP oraz możliwości debugowania – np. VS Code, PhpStorm lub Sublime Text.WP_DEBUGMode są niezbyt ważne podczas etapu rozwoju, gdy trzeba wykrywać błędy. Możesz to zrobić na stronie internetowej…wp-config.phpW pliku to jest zdefiniowane poprzez określenie odpowiednich parametrów.define('WP_DEBUG', true);Aby to uruchomić, wystarczy… (Nie zostało podane konkretnego instrukcji, dlatego tekst został pozostawiony nieukończony.)

Stworz swoj pierwszy plik z rozszerzeniem (plugin).

Zacznijmy od stworzenia najprostszego pluginu, który będzie wyświetlać własną wiadomość w panelu administracyjnym witryny internetowej.

Polecamy lekturę. Przewodnik po tworzeniu pluginów dla WordPress: jak stworzyć własną funkcję od zera

Napisanie pliku głównego pluginu oraz nagłówków z komentarzami:

Najpierw, w katalogu zainstalowanego WordPressa:wp-content/pluginsW folderze utwórz nowy folder o nazwie…my-first-pluginW tym folderze utwórz plik PHP o tej samej nazwie.my-first-plugin.php

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.

Otworź ten plik i wpisz następujący standardowy nagłówek z informacjami o pluginie. Te informacje będą wyświetlone na stronie zarządzania pluginami w panelu administracyjnym WordPress.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个学习WordPress插件开发的入门示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Po zapisaniu pliku wejdź do panelu administracyjnego WordPress i przejdź na stronę “Dodatki” (Plugins). Powinien pojawić się tam element “Moje pierwsze dodatko” (My First Plugin) w liście dostępnych dodatków. Aktywuj go – choć dodatek jeszcze nie wykona żadnej funkcji, został już poprawnie zainstalowany i włączony do systemu WordPress.

Rozwijanie podstawowej funkcji powiadomień w tle (backend notifications)

Teraz dodamy pierwszą funkcję do tego pluginu: wyświetlenie powitania na górnym polu panelu administracyjnego. Będziemy korzystać z możliwości dostępnych w WordPress.admin_notices„Hak” (ang. „Hook”). W głównym pliku pluginu, tuż pod komentarzem, dodaj następujący kod:

// 在管理后台显示自定义通知
function mfp_show_admin_notice() {
    ?&gt;
    <div class="notice notice-success is-dismissible">
        <p><?php _e( '欢迎使用“我的第一个插件”!', 'my-first-plugin' ); ?></p>
    </div>
    &lt;?php
}
add_action( &#039;admin_notices&#039;, &#039;mfp_show_admin_notice&#039; );

Tłumaczenie kodu: Stworzyliśmy element o nazwie…mfp_show_admin_noticeFunkcja ta wygeneruje kod HTML informacyjnego w formacie odpowiadającym standardom WordPress. Można ją użyć do wyświetlania komunikatów w panelu administracyjnym WordPress._e()Funkcje zostały stworzone z myślą o wsparciu procesów internacjonalizacji (i18n) w przyszłości. Na koniec…add_action()Funkcja umożliwia montaż naszej własnej funkcji w WordPress.admin_noticesNa tym “haku”. Po zapisaniu pliku i odświeżeniu witryny administracyjnej WordPressu ujrzysz zielone przypomnienie o powodzeniu.

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

Dokładna analiza i rozwój kluczowych funkcji wtyczek (pluginów)

Po opanowaniu podstawowej struktury możemy rozwijać bardziej przydatne funkcje. Często występuje potrzeba automatycznego dodawania określonego tekstu na końcu treści artykułu.

Użyj filtrów do modyfikacji treści artykułu.

WordPress oferuje wiele “filtrów” (Filter), które umożliwiają modyfikację różnych typów danych. Aby dodać tekst na końiec treści artykułu, użyjemy jednego z tych filtrów.the_contentFiltr. Dodaj następującą nową funkcję do głównego pliku wtyczki:

// 在文章内容末尾添加自定义文本
function mfp_append_to_content( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<div class="my-plugin-footer"><p>Dziękujemy za czytanie! Ten tekst został przygotowany dla Ciebie przez “Moje pierwsze dodatki” („My First Plugins”).</p></div>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_append_to_content' );

Ta funkcja przyjmuje dane wejściowe w formie oryginalnej.$contentPoprzez warunkowe sprawdzenie upewniamy się, że nasz własny tekst HTML jest dodawany tylko na stronach artykułów i wyłącznie w ramach głównego wykazu (main query). Po modifikacji treści są one zwracane. Ten sposób działania jest nieinwazywny – nie modyfikuje oryginalnego zawartości bazy danych.

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%

Stworzenie prostej strony z ustawieniami administracyjnymi

Aby użytkownicy mogli sami dostosować tekst dodawany na końcu artykułu, musimy stworzyć stronę konfiguracji dla tego dodatku. To wymaga kilku kroków: rejestracji menu, tworzenia funkcji obsługujących interakcje z użytkownikiem na tej stronie oraz obsługi danych wprowadzonych w formularzu.

Najpierw użyjadmin_menuDodaj do elementu „hook” stranicę z podmenü.

// 添加插件设置菜单到后台
function mfp_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',    // 权限要求
        'my-first-plugin',   // 菜单slug
        'mfp_options_page_html' // 显示页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

Następnie należy definiować funkcję wywoływaną w odpowiedzi na dane wydarzenie (tzw. funkcję callback).mfp_options_page_htmlNie ma dostępnych informacji na temat HTML formularza potrzebnego do renderowania strony z ustawieniami, ani informacji o sposobach bezpiecznego rejestracji, zapisu i pobierania opcji za pomocą API WordPress. Proponuję przygotować uproszczone rozwiązanie, które obejmuje tylko elementy niezbędne do realizacji tego celu. Jeśli masz dodatkowe dane lub wymagania, proszę podać je, a ja przygotuję bardziej szczegółową odpowiedź.

Polecamy lekturę. Pełny przewodnik po rozwoju pluginów dla WordPress: od poznania podstaw do tworzenia profesjonalnych rozszerzeń

// 设置页面的HTML内容
function mfp_options_page_html() {
    // 检查用户权限
    if ( !current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&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
            // 输出设置字段、非ce等安全字段
            settings_fields( 'mfp_options_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    <?php
}

// 初始化插件设置
function mfp_settings_init() {
    // 注册一个设置
    register_setting( 'mfp_options_group', 'mfp_footer_text' );

// 添加一个设置区域
    add_settings_section(
        'mfp_section',
        '自定义文本设置',
        null,
        'my-first-plugin'
    );

// 向区域中添加字段
    add_settings_field(
        'mfp_field_footer',
        '文章页脚文本',
        'mfp_field_footer_html',
        'my-first-plugin',
        'mfp_section'
    );
}
add_action( 'admin_init', 'mfp_settings_init' );

// 渲染文本输入字段
function mfp_field_footer_html() {
    $option = get_option( 'mfp_footer_text', '感谢阅读!本文由“我的第一个插件”为您呈现。' );
    ?>
    <input type='text' name='mfp_footer_text' value='<?php echo esc_attr( $option ); ?>' class='regular-text'>
    <p class="description">Treść wprowadzona tutaj będzie wyświetlana na końcu każdego artykułu.</p>
    &lt;?php
}

Na koniec, zmodyfikuj to, co było wcześniej.mfp_append_to_contentFunkcja, która umożliwia uzyskanie informacji z bazy danych na podstawie wybranych opcji.mfp_footer_textTekst jest czytany z pliku, zamiast używać tekstu ustawionego w sposób stały (hardcoded).

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

Na ostatnim etapie rozwoju należy zwrócić uwagę na bezpieczeństwo, jakość kodu oraz proces wdrożenia, aby upewnić się, że dodatek jest solidny i gotowy do użycia.

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.

遵循安全最佳实践

Wszystkie dane wprowadzone przez użytkowników muszą zostać uwzględnione pod kątem bezpieczeństwa (np. poprzez escape) lub sprawdzone, zanim zostaną wyświetlone w przeglądarcu lub zapisane w bazie danych. Podczas wyświetlania należy używać odpowiednich procedur bezpieczeństwa, aby zapobiec potencjalnym problemom.esc_html()esc_attr()esc_url()Funkcje takie jak… Są używane przy obsłudze wysyłania formularzy lub żądań AJAX.wp_verify_nonce()check_admin_referer()Aby sprawdzić legalność żądania i zapobiec atakom typu CSRF (Cross-Site Request Forgery), zawsze unikaj bezpośredniego ufania w dane przesyłane w żądaniu.$_GET$_POST$_REQUESTDane zawarte w…

Rozwijanie wsparcia dla różnych języków (internacjonalizacja)

Aby plugin był dostępny dla użytkowników z całego świata, konieczne jest przetłumaczenie wszystkich tekstów skierowanych do użytkowników w kodzie. To już zrobiliśmy w poprzednich przykładach._e()Funkcja ma służyć do wyświetlania tłumaczonego tekstu. Ponadto konieczne jest ujęcie tego w komentarzach do pliku rozszerzenia (pluginu).Text DomainDomain Path
Podczas inicjalizacji wtyczki (na przykład poprzez…)plugins_loaded(Haki), użyjload_plugin_textdomain()Funkcja do ładowania plików językowych:

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

Następnie możesz użyć narzędzia takiego jak Poedit, aby wybrać ciągi tekstowe z źródłowego kodu pluginu.__()_e()String zawierający zagnieżdzone funkcje (tj. funkcje umieszczone w innych funkcjach)..potPliki szablonów, które służą tłumaczom do tworzenia tekstów..po.moDokumenty.

Organizacja kodu i aspekty wydajności

Wraz z rozwojem funkcjonalności dodatków nie powinno być wszystkiego koda umieszczonego w jednym głównym pliku. Rozsądne jest rozdzielić kod według modułów funkcjonalnych i umieścić go w osobnych plikach..phpW pliku można zawierać różne elementy, a te elementy można selektywnie włączyć do głównego pliku. Na przykład, można stworzyć…includes/admin/Katalog zawiera kod związany z obsługą backendu.includes/public/Miejsce na przechowywanie kodu związanego z frontendem.includes/class-*.phpMiejsce na definicje klas.
Dla operacji intensywnie wymagających zasobów rozważaj używanie funkcji cache tymczasowego w WordPress (Transients API) do przechowywania wyników długich zapytań, lub zadań planowanych (Cron API) do wykonywania procesów w tle, które nie wymagają natychmiastowej odpowiedzi. Upewnij się, że w przypadku wyłączenia dodatku wszystkie elementy związane z nim zostaną usunięte poprzez odpowiednie mechanizmy odinstalowania (zdefiniowane w konfiguracji pluginu).register_uninstall_hook()Usuną dane i ustawienia wytworzone przez użytkownika, aby witryna zachowała porządek i wygląd.

Podsumowanie.

W ramach tego tutorialu udało nam się stworzyć pełnowartościowy plugin dla WordPressa, od początku do końca. Zaczęliśmy od poznania podstawowej struktury pluginu oraz przygotowania środowiska rozwojowego, a potem stworzyliśmy plik główny zawierający standardowe nagłówki komentarzy. Następnie…admin_noticesthe_contentTe dwa kluczowe „hakówki” (ang. hooks) umożliwiają wysyłanie powiadomień w tle oraz wyświetlanie tekstu w nagłówku artykułu. Aby zwiększyć użyteczność tego pluginu, wprowadziliśmy API do ustawień WordPress i stworzyliśmy stronę administracyjną, która umożliwia użytkownikom personalizację tekstu. Na koniec porozmawialiśmy o kluczowych aspektach bezpieczeństwa, wsparciu dla różnych języków oraz optymalizacji struktury kodu – tematach istotnych przy rozwijaniu pluginów. Ten proces jasno pokazuje podstawowe zasady tworzenia pluginów dla WordPress: wykorzystanie bogatych mechanizmów akcji i filtrów do dodawania nowych funkcji, stosowanie standardów API przy budowaniu interfejsu, a także stale dbanie o bezpieczeństwo i łatwość obsługi kodu. Po opanowaniu tych elementów masz już możliwość eksplorowania świata bardziej złożonych pluginów.

FAQ – najczęściej zadawane pytania.

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

Konieczne jest posiadanie solidnych umiejętności programowania w PHP, ponieważ kod pluginów jest głównie napisany w tym języku. Ponadto należy mieć podstawową znajomość HTML, CSS i JavaScript, aby móc obsługiwać wygląd i interakcje na stronie internetowej. Wiedza o podstawowych konceptach WordPressa, takich jak tematy, typy artykułów, kategorie, a szczególnie o systemie hooków (w tym akcje i filtry), jest kluczowa.

###
Jakie pliki muszą najbardziej podstawowe elementy wtyczki do WordPress zawierać?

W najprostszym przypadku plugin może składać się z jednego tylko pliku w formacie PHP. Ten plik musi zawierać na początku specjalne informacje o pluginie, zgodne z standardami WordPress – tzw. „Plugin Headers”. Takie informacje znajdują się w naszym przykładzie.Plugin NameDescriptionIt to pole, np. „title” (tytuł). To jedyny element, na podstawie którego WordPress rozpoznaje plugin i wyświetla go w liście zarządzania pluginami.

###
Jak powinienem nazwać funkcje i zmienne w moim pluginie?

Aby uniknąć konfliktów z kodem core’u WordPress, tematów lub innych pluginów, wszystkie własne funkcje, klasy, zmienne i stałe muszą mieć unikalne prefiksy. Zwykle zaleca się używać prefiksów powiązanych z skrótami lub nazwami pluginów – tak jak to jest w naszym przykładzie.mfp_(Wyrażając się w imieniu „My First Plugin”): Nazwy klas również powinny spełniać te same wymogi i, jeśli to możliwe, używać zrozumiałych, pełnych nazw.

###
Czy tabeli bazy danych lub ustawienia utworzone w ramach dodatku zostaną usunęte po jego wykluczeniu?

W standardowym przypadku nie. Jeśli chcesz to zrobić…add_option()update_option()Utworzone opcje lub dostosowane tabele danych mogą pozostać w bazie danych po usunięciu plików wtyczki przez użytkownika za pomocą panelu administracyjnego WordPress. Aby zapewnić czysty proces odinstalowania, należy użyć odpowiednich narzędzi lub procedur, które umożliwią usunięcie tych danych.register_uninstall_hook()Funkcja służy do rejestracji funkcji obsługującej czyszczenie – w tej funkcji są usuwane wszystkie opcje związane z pluginami, tabeli z bazy danych oraz tymczasowe zasoby pamięci.

###
Jak zrobić, aby moje rozszerzenie było kompatybilne z większą liczbą wersji WordPress?

W kodzie unikaj używania zbyt nowych wersji PHP lub funkcji specyficznych dla WordPress. Przed użyciem danej funkcji, klasy lub hooka sprawdź jej oficjalne dokumentacje, aby zapoznać się z wersją WordPress, w której została wprowadzona. Możesz to zrobić w komentarzach umieszczonech na początku głównego pliku pluginu.Requires at least:Uwzględnij w deklaracjach pola najniższy wymagany wymiar WordPressu. W kodzie można to połączyć z warunkowymi instrukcjami, aby zrealizować dynamyczną kontrolę kompatybilności.function_exists()class_exists()Sprawdź, aby zaproponować alternatywny rozwiązanie lub przyjazne ostrzeżenie.