Jak zacząć od zera: stworzenie swojego pierwszego plugina dla WordPressa

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

Przygotowania przed rozpoczęciem rozwoju

Przed zaczęciem pisania kodu musimy upewnić się, że środowisko rozwoju jest poprawnie ustawione, a także zrozumieć podstawową strukturę pluginów WordPress. Dobrze przygotowane lokalne środowisko rozwoju stanowi podstawę do efektywnej pracy.

Ustawienie lokalnego środowiska rozwoju

Najpierw potrzebujesz lokalnego środowiska serwerowego, aby uruchomić WordPress. Zaleca się używać zintegrowanych narzędzi takich jak XAMPP, MAMP lub Local by Flywheel. Po instalacji WordPressa możesz… wp-content/plugins Zacznij swoją pracę nad rozwojem pluginów w tej katalogu. Ten katalog zawiera wszystkie pluginy, zarówno te, które sami stworzyliśmy, jak i te, które zainstalowaliśmy z oficjalnego źródła.

Zrozumienie kluczowych plików wtyczki (pluginu)

Każdy plugin WordPress wymaga co najmniej jednego pliku głównego, który stanowi “dowód tożsamości” i “element startowy” pluginu. Ten plik zwykle nosi nazwę odnoszącą się do jego funkcji. my-first-plugin.phpBlok komentarzy na początku tego pliku głównego jest niezbyt ważny, ponieważ opisuje podstawowe informacje o tym pluginie dla systemu WordPress.

Polecamy lekturę. Rozwój pluginów dla WordPress – od początków do mistrzostwa: pokazujemy ci, jak stworzyć swój pierwszy własny plugin.

Stworz swoj pierwszy plik z rozszerzeniem (plugin).

Teraz zacznijmy od najprostszego punktu i stworzymy prosty plugin, który będzie mieć rzeczywiste funkcje.

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.

Napisanie komentarza na początku pliku z pluginem:

wp-content/plugins W katalogu utwórz plik o nazwie… my-first-plugin Utworz nowy folder. Następnie w tym folderze stworz główny plik. my-first-plugin.phpNa samym początku tego pliku należy dodać komentarz z informacjami o pluginie, zgodny z standardami WordPress.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://yourwebsite.com/my-first-plugin
 * Description:       这是一个用于学习的简单插件,用于在文章末尾添加自定义文本。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Ten kod informuje WordPress, że jest to plugin, a także określa nazwę, opis, wersję oraz inne informacje, które będą wyświetlone w interfejsie administracyjnym. Po zapisaniu pliku loguj się do panelu administracyjnego WordPress, wejdź na stronę “Pluginy” i twoj plugin powinien pojawić się na liście. Teraz możesz go aktywować, choć na razie nie ma on żadnych funkcji.

Zrealizuj funkcję podstawową: filtrowanie treści artykułów.

Po aktywacji wtyczki musimy zrobić z nią coś konkretnego. Jedną z najczęściej używanych funkcji na počzątku jest modyfikacja treści artykułów. Będziemy to robić za pomocą… the_content Ten hook filtru automatycznie dodaje tekst dostosowany na końcu każdego artykułu.

W głównym pliku my-first-plugin.php Poniżej komentarza umieszczonego w nagłówku dodajemy kod realizujący wymagane funkcje:

Polecamy lekturę. Jak stworzyć profesjonalny temat dla WordPressa: pełny przewodnik od zera do wdrożenia

// 在文章内容末尾添加自定义文本
function myfp_add_custom_text_to_content( $content ) {
    // 确保只在主循环的单篇文章页面添加
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><strong>Dziękujemy za czytanie! Ten tekst został przygotowany z udziałem projektu “Moje pierwsze dodatki” („My First Plugins”).</strong></p>';
        $content .= $custom_text;
    }
    return $content;
}
// 将我们的函数挂载到 ‘the_content’ 过滤器上
add_filter( 'the_content', 'myfp_add_custom_text_to_content' );

Ten kod definiuje obiekt o nazwie… myfp_add_custom_text_to_content Funkcja ta przyjmuje jako argument tekst artykułu. $content Jako parametr należy podać informację, która umożliwi sprawdzenie warunków i doprowadzi do dodania tekstu tylko na stronie pojedynczego artykułu w interfejsie użytkownika, unikając jego wyświetlania na innych stronach (np. na stronach z listą artykułów). Następnie dodaje się wybrany fragment HTML do oryginalnego tekstu i powraca zmieniony wynik. add_filter() Funkcja umożliwia “przyczepienie” tej dostosowanej funkcji do core’a WordPress. the_content Filtr jest włączony. Dzięki temu każdy raz, gdy WordPress przygotowuje się do wyświetlenia treści artykułu, najpierw zostanie wykonywana nasza funkcja.

Po zapisaniu pliku odwiedź frontend witryny i sprawdź dowolny artykuł – tekst podziękowania, który dodaliśmy, pojawi się na dole strony.

Dodać opcje zarządzania dla pluginu

Dobrze zaprojektowany plugin wymaga zwykle kilku opcji konfiguracji, które umożliwiają użytkownikom dokonywanie zmian w tle systemu. Dlatego dodamy stronę konfiguracji dla funkcji “Tekst dostosowany”, o której mówiliśmy wcześniej.

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%

Utworzenie menu do zarządzania pluginami

Najpierw musimy dodać nowy element menu do bocznego menu w panelu administracyjnym WordPress. Do tego potrzebny jest dostęp do narzędzi dostępnych w WordPress. add_action() Funkcje i… admin_menu Hak.

// 添加管理菜单
function myfp_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',    // 权限要求
        'my-first-plugin',   // 菜单 slug
        'myfp_options_page_html' // 显示设置页面的回调函数
    );
}
add_action( ‘admin_menu’, ‘myfp_add_admin_menu’ );

add_options_page() Funkcja utworzy element menu podstawowego w menu “Ustawienia”. Do jej działania potrzebne są kilka parametrów: tytuł strony, tytuł menu, uprawnienia użytkownika, unikalny identyfikator menu (slug) oraz nazwa funkcji obsługującej wyświetlanie treści HTML strony z ustawieniami. myfp_options_page_html

Tworzenie strony z ustawieniami oraz zapisywania danych

Następnie musimy definiować funkcję zwrotną (callback), która będzie renderować stronę z ustawieniami oraz obsługiwać dane wprowadzone przez użytkownika.

Polecamy lekturę. Tutorial dotyczący tworzenia wtyczek WordPress: od zera do stworzenia swojej pierwszej wtyczki.

// 渲染设置页面的HTML
function myfp_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
            // 输出必要的安全字段
            settings_fields( ‘myfp_settings’ );
            // 输出设置区域
            do_settings_sections( ‘my-first-plugin’ );
            // 输出提交按钮
            submit_button( ‘保存设置’ );
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    ‘myfp_field_custom_text’ ]
    );
}
add_action( ‘admin_init’, ‘myfp_settings_init’ );

// 渲染文本框的HTML
function myfp_field_custom_text_html() {
    // 从数据库获取已保存的值
    $options = get_option( ‘myfp_options’ );
    $value = $options[‘myfp_field_custom_text’] ?? ‘’; // 使用空合并运算符,如果不存在则赋空值
    ?&gt;
    <input type="“text”"
           id="“myfp_field_custom_text”"
           name="“myfp_options[myfp_field_custom_text]”"
           value="“NO NUMERIC NOISE KEY" 1000”
 class="“regular-text”">
    &lt;?php
}

Ten kod działa poprzez… register_settingadd_settings_sectionadd_settings_field Za pomocą serii funkcji, zgodnie z normami API ustawień WordPress, została stworzona strona ustawień zawierająca polo tekstowe. Wpisany przez użytkownika tekst jest bezpiecznie przechowywany. wp_options tabular myfp_options Zarejestrowano.

Na koniec musimy zmienić funkcję, która wcześniej filtrowała treść artykułów, aby używała tekstu pobranego z bazy danych zamiast tekstu ustawionego w kodzie źródłowym.

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.
function myfp_add_custom_text_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( ‘myfp_options’ );
        $custom_text = $options[‘myfp_field_custom_text’] ?? ‘’;
        if ( ! empty( $custom_text ) ) {
            $content .= ‘<p><strong>’ . esc_html( $custom_text ) . ‘</strong></p>’;
        }
    }
    return $content;
}

Teraz użytkownicy mogą wpisać dowolny tekst na stronie “Ustawienia” -> “Moje ustawienia pluginów”. Po zapisaniu tego tekstu będzie on wyświetlany na końcu wszystkich artykułów na stronie internetowej.

Dziennik postępów w rozwoju pluginów i przygotowaniach do ich publikacji

Gdy zakończymy implementację podstawowych funkcji, musimy zastanowić się nad wytrzymałością i łatwością konserwacji pluginu, a także nad tym, jak go udostępnić innym użytkownikom.

Dodanie wsparcia dla bezpieczeństwa i internationalizacji

Bezpieczeństwo to kluczowy aspekt przy rozwijaniu dodatków (pluginów). W powyższym przykładzie już go uwzględniliśmy. esc_html()esc_attr() Można użyć funkcji takich jak `escapeshell()` lub `htmlentities()` do escapeowania wyświetlanych danych, aby zapobiec atakom typu XSS. Podczas obsługi wprowadzanych przez użytkowników danych, wykonywania zapytań do bazy danych lub włączania zewnętrznych plików zawsze należy korzystać z funkcji bezpieczeństwowych dostępnych w WordPress. wpdb->prepare()sanitize_text_field()check_admin_referer() I tak dalej.

Ponadto, aby plugin był dostępny dla użytkowników z całego świata, konieczna jest jego internacjonalizacja (ang. internationalization, lub skrótowo i18n). Musimy otoczyć wszystkie teksty skierowane do użytkowników w pluginie funkcjami tłumaczeniowymi dostępnymi w WordPress. To wymaga zmian w naszym wcześniejszym kodzie.

1. Zaznaczono to w komentarzach na początku pliku z pluginem. Text Domain: my-first-plugin
2. Zawartość pola tekstowego musi zostać naładowana. Najczęściej to robi się w nagłówku głównego pliku (na dnie pliku).add_action( ‘plugins_loaded’, function() { load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( FILE ) ) . ‘/languages/’ ); } );
3. Stringy obiekty pakowania. Na przykład, zmienić nagłówek obszaru ustawień na… ( ‘自定义文本设置’, ‘my-first-plugin’ )Zmienij nagłówek menu na… ( ‘我的插件设置’, ‘my-first-plugin’ )Dzięki temu tłumacz może… .po/.mo Plik zawiera inne wersje tych tekstów w innych językach.

Gotowe jest przygotowanie pliku rozszerzenia do publikacji w oficjalnym katalogu.

Jeśli chcesz złożyć plik rozszerzenia do oficjalnego katalogu rozszerzeń WordPress.org, musisz spełnić określone wymogi:
1. Standardy kodu: stosuj się do standardów kodowania WordPress.
2. Struktura plików: Oprócz pliku głównego, zwykle są potrzebne również inne pliki. README.txt(Opis wtyczki, używanej na stronach katalogów)uninstall.php(Zajęcia związane z przygotowaniem systemu na odinstalowanie wtyczek) itd.
3. Repozytorium SVN: Oficjalne katalogi są zarządzane za pomocą systemu Subversion (SVN). Musisz złożyć swój kod dodatkowego (pluginu) do wskazanego repozytorium SVN.
4. Metadane:README.txt Konieczne jest przygotowanie informacji według określonego formatu, zawierającego nazwę pluginu, opis, instrukcje instalacji, najczęściej występujące pytania, historię aktualizacji itd.

Podsumowanie.

Dzięki temu poradnikowi ukończyłeś cały cykl rozwoju dodatku dla WordPress: od stworzenia pierwszego pliku, napisania komentarzy w nagłówku, implementacji kluczowych funkcji za pomocą haków akcji (action hooks) i haków filtrów (filter hooks), po dodanie stron z konfiguracjami dla dodatku, a na koniec poznaliście także zaawansowane tematy takie jak bezpieczeństwo, internacjonalizacja oraz przygotowanie do publikacji. Dodatek, który umożliwia dodawanie tekstu na końcu artykułu, jest prosty w implementacji, ale pokazuje najważniejsze koncepcje i procesy stosowane przy tworzeniu dodatków. Po opanowaniu tych podstawowych znań możesz budować coraz bardziej zaawansowane i złożone dodatki, eksplorując bogatą sieć haków (Hooks), skróty (Shortcodes), typy artykułów dostosowane do potrzeb (Custom Post Types – CPT) oraz REST API. Pamiętaj, że praktyka to najlepszy sposób uczenia się – próbowanie modyfikacji kodu i dodawania nowych funkcji jest kluczowym elementem w utrzymywaniu wiedzy.

FAQ – najczęściej zadawane pytania.

Jak ma nazywać się główny plik dodatku (pluginu)?

Nie istnieje obowiązek co do nazwy głównego pliku wtyczki, ale musi ona zaczynać się na literę „plugin”. .php Zakończenie. Zwykle, dla jasności i uniknięcia duplikatów, używamy nazw identycznych z nazwą foldera z pluginem lub nazw, które opisują funkcje tego pluginu. my-awesome-plugin.phpWordPress rozpoznaje pluginy poprzez odczytywanie określonego bloku komentarzy znajdującego się na początku tego pliku.

Dlaczego mój plugin nie jest wyświetlany w menu w tle (w obszarze zarządzania aplikacją)?

Zwykle to wynika z kilku powodów. Najpierw sprawdź, czy plugin został poprawnie aktywowany. Następnie sprawdź… add_menu_page() Aby upewnić się, że użytkownik, który loguje się obecnie, posiada odpowiednie uprawnienia, sprawdź parametry uprawnień („capability”) w funkcjach tego typu. manage_optionsNa koniec sprawdź, czy twoja funkcja poprawnie przeprowadza wszystkie wymagane operacje. add_action(‘admin_menu’, …) Montowanie. Błąd gramatyczny w kodzie PHP może doprowadzić do nieudanego inicializowania całego pluginu.

Jak debugować błędy PHP w pluginie?

W fazie rozwoju zaleca się włączyć tryb debugowania w WordPress. To można zrobić w katalogu głównym witryny. wp-config.php W pliku upewnij się, że następujące ustawienia są włączone:
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true ); // 将错误记录到 /wp-content/debug.log
define( ‘WP_DEBUG_DISPLAY’, false ); // 不建议在页面上显示,以免破坏布局
W ten sposób informacje o błędach będą zapisywane do pliku logów, co ułatwi identyfikację problemów. Przed opublikowaniem dodatku koniecznie wyłącz modeł debugowania.

W jakim miejscu są zapisywane dane dotyczące opcji pluginów?

Używanie wtyczek add_option()update_option() Dane zapisane przez funkcję są standardowo przechowywane w bazie danych WordPress. wp_options W tabeli (przefiks tabeli może być inny). Użyj… get_option() Funkcje mogą czytać te dane. W przypadku bardziej złożonych struktur danych czasami tworzone są też własne tabele w bazach danych, ale to wymaga bardziej ostrożnego podejścia.

Jak zrobić, aby mój plugin obsługiwał kilka języków (internacjonalizacja)?

Musisz użyć funkcji tłumaczeniowych w WordPress, aby otoczyć wszystkie teksty skierowane do użytkowników. Najczęściej używana jest funkcja `wptranslate()`. __(‘字符串’, ‘text-domain’)_e(‘字符串’, ‘text-domain’)Następnie użyj narzędzia takiego jak Poedit, aby wybrać te ciągi tekstu i stworzyć z nich nowy plik. .pot Pliki szablonów, a także tworzenie wersji tych plików w odpowiednich językach (np. polskim). zh_CN.po.moOstatecznie plik z tłumaczeniem umieść w katalogu z pluginami. /languages/ Umieszczone w folderze i wykorzystywane podczas inicjalizacji pluginu. load_plugin_textdomain() Funkcje są używane do ich ładowania.