Światowy przewodnik po rozwoju pluginów dla WordPressa: jak stworzyć swój pierwszy plugin od zera

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

Przygotowanie i ustawienie środowiska

Przed rozpoczęciem pisania kodu potrzebny jest odpowiedni środowisko rozwoju. Składa się ono z lokalnej instalacji WordPress, edytora kodu oraz podstawowych znanych z PHP. Zaleca się używanie narzędzi takich jak XAMPP, MAMP lub Local by Flywheel, aby szybko uruchomić lokalne środowisko WordPress. Upewnij się, że twoja wersja PHP odpowiada wymogom oficjalnych wymagań WordPress – zwykle to PHP 7.4 lub wyższa.

Plugin to w istocie jeden lub kilka plików w formacie PHP, umieszczone w folderze WordPress.wp-content/pluginsKażdy plugin musi mieć unikalne nazwę, a w nagłówku jego głównego pliku muszą znajdować się standardowe informacje o pluginie – to jest podstawa dla identyfikacji pluginów przez WordPress.

Stworz swoj pierwszy plik z rozszerzeniem (plugin).

Najpierw…wp-content/pluginsUtworz kopię foldera w katalogu, na przykład:my-first-pluginNastępnie w tym folderze utworz file PHP główny, który zwykle ma taką samą nazwę jak folder.my-first-plugin.phpW tym pliku należy wpisać informacje o nagłówku pluginu.

Polecamy lekturę. Pełny przewodnik po tworzeniu pluginów dla WordPressa: jak stworzyć swój pierwszy plugin od zera

<?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
 */

Po zapisaniu pliku wejdź na stronę “Dodatki” w panelu administracyjnym WordPressa i powinien pojawić się element “Moje pierwsze dodatko” w liście dostępnych dodatków. Aktywuj go – choć na razie nie ma żadnych funkcji, to oznacza, że twój dodatek został успешnie zainstalowany i włączony do systemu WordPress.

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.

Zrozumienie kluczowych mechanizmów WordPressa: hooki i filtry

Możliwości rozszerzalności WordPress wynikają z jego architektury opartej na zdarzeniach, a kluczowym elementem w tej architekturze są “hakówki” (Hooks). Hakówki dzielą się na dwa typy: akcje (Actions) i filtry (Filters). Zrozumienie ich jest kluczowe dla skutecznego tworzenia dodatków (pluginów) do WordPress.

Aktywnie działające „haki” (ang. action hooks) umożliwiają wstawienie i wykonywanie własnego kodu w określonych momencach – na przykład przy opublikowaniu artykułu lub załadowaniu strony. Można na przykład wysłać e-mail w momencie publikacji artykułu.add_action()Funkcja umożliwia przypisanie Twojej własnej funkcji do określonego „hooka akcji” (action hook).

Filtry z hookami umożliwiają modyfikację danych. Przed tym, jak dane zostaną użyte (np. zapisane w bazie danych lub wyświetlone w przeglądarcu), można je przekierować i zmienić. Na przykład można zmienić nagłówek artykułu lub treść komentarza. Można to zrobić za pomocą dostępnych narzędzi i funkcji.add_filter()Funkcja służy do aplikowania filtrów.

Dodawanie funkcji za pomocą aktywnych háków (action hooks)

Przyjmiemy, że chcemy dodać jeden wiersz tekstu dostosowanego do potrzeb na dole strony administracyjnej witryny internetowej. WordPress oferuje narzędzie o nazwie…admin_footerAktywny „hook” (zdarzenie, które jest wykonywane w określonym momencie). Możemy dodać następujący kod do głównego pliku pluginu:

Polecamy lekturę. Przewodnik dla początkujących w rozwoju pluginów dla WordPress: jak stworzyć swój pierwszy funkcjonalny plugin od zera

// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
    echo '<p>Dziękujemy za korzystanie z “Mojego pierwszego pluginu”!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

Zapisz plik i odśwież stronę administracyjną WordPressa. Przesuń się do nagłówka strony (footer) – powinienś zobaczyć dodany tekst. To właśnie jest podstawa działania aktywnych haczków (action hooks): wykonywanie kodu w określonym miejscu.

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

Teraz spróbujmy zmienić wszystkie nagłówki artykułów, dodając na końcu każdego z nich znak firmowego. Możemy użyć…the_titleFiltry.

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Ten kod sprawdza, czy obecna środowisko znajduje się w głównym cyklu generowania artykułów na stronie frontowej. Jeśli tak, to dodaje symbol “™” po nagłówku artykułu.10To oznacza priorytet – im mniejszy numer, tym zadanie zostanie wykonane wcześniej.2To oznacza, że nasza funkcja przyjmuje dwa parametry (oryginalne).$title$post_id)。

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%

Tworzenie funkcji dodatków: stworzenie menu zarządzania i strony ustawień

Dojrzały plugin musi zapewniać możliwość konfiguracji w panelu administracyjnym WordPress. To wymaga stworzenia specjalnej strony menu zarządzania dla tego pluginu. WordPress oferuje bogatą gamę funkcji API, które umożliwiają realizację tego celu.add_menu_page()add_options_page()

Dodaj menu zarządzania na najwyższym poziomie.

Dodamy do pluginu osobne, główne menu. To zwykle jest standardowym rozwiązaniem w takich przypadkach.admin_menuDziałanie zostało zrealizowane w ramach „hooków akcji” (action hooks). Tworzymy funkcję, która służy do definiowania menu i stron.

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

Następnie musimy definiować funkcję zwrotną (callback function).myplugin_display_settings_page()To renderuje zawartość HTML strony z ustawieniami.

Polecamy lekturę. Rozwój pluginów dla WordPress: pełny przewodnik od poznania podstaw do osiągnięcia biegłości w tworzeniu własnych funkcji

// 定义设置页面的显示内容
function myplugin_display_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Ustawienia mojej wtyczki.</h1>
        <form method="post" action="/pl/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

Ustawienia rejestracji, pola oraz partycje

Aby bezpiecznie obsługiwać dane z formularzy, musimy skorzystać z API do konfiguracji WordPress. To obejmuje rejestrację nowych ustawień, dodawanie sekcji i polów do tych ustawień.

// 初始化插件设置
function myplugin_settings_init() {
    // 1. 注册一个设置(存储在wp_options表中)
    register_setting(
        ‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
        ‘myplugin_options’ // 存储在数据库中的选项名
    );

// 2. 添加一个设置分区
    add_settings_section(
        ‘myplugin_section_basic’, // 分区ID
        ‘基础设置’, // 分区标题
        ‘myplugin_section_basic_callback’, // 分区介绍的回调函数
        ‘myplugin-settings-page’ // 所属页面的slug
    );

// 3. 为分区添加一个字段
    add_settings_field(
        ‘myplugin_field_message’, // 字段ID
        ‘欢迎信息’, // 字段标签
        ‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
        ‘myplugin-settings-page’, // 所属页面的slug
        ‘myplugin_section_basic’ // 所属分区的ID
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// 分区介绍的回调函数
function myplugin_section_basic_callback() {
    echo ‘<p>Ustawienie podstawowych informacji o pluginie.</p>’;
}

// 字段渲染的回调函数
function myplugin_field_message_callback() {
    // 从数据库获取现有值
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
    // 输出输入框
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

Teraz twoje wtyczka posiada pełną stronę konfiguracji, zgodną z standardami WordPress, umożliwiającą bezpieczne zapisywanie i odczytywanie ustawień.

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.

Najlepsze praktyki internacionalizacji i bezpieczeństwa w przypadku dodatków (plug-inów)

Aby twoje dodatki były dostępne dla użytkowników z całego świata, internacionalizacja (ang. i18n) jest koniecznym krokiem. Równocześnie stosowanie standardów bezpieczeństwa stanowi podstawę dla ochrony ciebie oraz witryn internetowych Twoich użytkowników przed atakami.

Implementacja internacjonalizacji tekstu

WordPress jest używany do tworzenia i zarządzania stron internetowych.__()_e()Aby zrealizować tłumaczenie za pomocą odpowiednich funkcji, musisz najpierw upewnić się, że w nagłówku pliku rozszerzenia (plugin header) wszystko zostało ustawione poprawnie.Text Domain(Na przykład:my-first-pluginNastępnie wszystkie teksty skierowane do użytkowników należy umieścić w zbiórce tekstów (string pool) i otoczyć je funkcją tłumaczeniową.

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>Dziękujemy za korzystanie z “Mojego pierwszego pluginu”!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

Następnie należy użyć narzędzia takiego jak Poedit do generowania….potPlik (z wzorcem) umieszczony w pluginie.languagesW folderze..poI po skompilowaniu..moPlik. Na koniec użyj go podczas inicjalizacji wtyczki.load_plugin_textdomain()Tłumaczenie: „Function loading”.

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

Zgodnie z zasadami bezpiecznego kodowania…

Bezpieczeństwo jest najważniejsze. Najpierw zawsze trzeba mieć na oku to, co wpisują użytkownicy. Wszelkie dane pochodzące od użytkowników lub z zewnętrznych źródeł…$_GET$_POST$_COOKIEWszystkie elementy muszą zostać sprawdzone, przygotowane do dalszego użycia oraz uwzględnione pod kątem specjalnych wymagań (np. escape).

  • Uwzględnij konieczność escapeowania danych przy ich wyświetlaniu w HTML, JavaScript lub URL-ach, używając odpowiednich funkcji.
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘ . esc_html( $text ) . ‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/pl/“‘/" . esc_url( $url ) ‘“>link (na stronie internetowej)</a>’;
  • Weryfikacja wprowadzonych danych: sprawdzenie, czy dane odpowiadają oczekiwanemu formacie (np. czy jest to adres e-mail, liczba itd.).
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • Sprawdzenie uprawnień: Przed wykonywaniem operacji administracyjnych sprawdź, czy aktualny użytkownik posiada odpowiednie uprawnienia.
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • Weryfikacja Nonce: W przypadku operacji wymagających zmian stanu systemu (np. wysyłania formularzy, żądań AJAX) używa się numeru jednorazowego (Nonce) w celu zapobiegania atakom typu CSRF (Cross-Site Request Forgery).
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

Podsumowanie.

Dzięki temu przewodnikowi udało ci się przejść przez cały proces od tworzenia podstawowych plików wtyczek, po zrozumienie i stosowanie systemu hooków w jądrze WordPress, budowę interfejsu administracyjnego, aż po implementację funkcji internationalizacji oraz zastosowanie podstawowych zasad bezpieczeństwa. Posiadasz teraz kluczowe umiejętności niezbędne do tworzenia funkcjonalnych, dobrze strukturalizowanych i bezpiecznych wtyczek do WordPress. Esencją rozwoju wtyczek jest skuteczne wykorzystanie hooków akcji i filtrów do rozszerzania funkcjonalności WordPress, zawsze z uwzględnieniem bezpieczeństwa i łatwości utrzymania. Następnie możesz spróbować eksplorować bardziej złożone API, takie jak własne tabele bazy danych, interakcje AJAX lub punkty końcowe REST API, aby stworzyć jeszcze potężniejsze narzędzia.

FAQ – najczęściej zadawane pytania.

Jakie są wymagane przedstawione w tekście wiedze, by rozwijać plagiary dla WordPressu typu ###?
Konieczne jest posiadanie podstawowych umiejętności programowania w PHP, a znajomość HTML, CSS oraz JavaScript (zwłaszcza jQuery) będzie bardzo przydatna. Najważniejsze jest też posiadanie ogólnej wiedzy o strukturze WordPressa, w tym o tematach, pluginach, typach artykułów, rolach użytkowników itd. Ten przewodnik przyjmuje, że posiadasz te podstawowe znania.

Jak debugować moją wtyczkę WordPress?

Najpierw upewnij się, że…wp-config.phpZ plikuWP_DEBUGKonstanta ustawiona jest na…trueTo wyświetli błędy, ostrzeżenia i powiadomienia PHP na stronie. Ponadto można użyć…error_log()Funkcja umożliwia zapisy informacji o debugowaniu do logów błędów na serwerze. W przypadku bardziej złożonych procedur debugowania można zastanowić się nad użyciem specjalnych dodatków, np. Query Monitor, które umożliwiają oglądanie szczegółowych danych dotyczących zapytań do bazy danych, wykonywania hooków, ładowania skryptów itd.

Jak powinienem rozdawać plagiary, które sam opracowałem?

Dla osobistego użytkowania lub ograniczonego udostępniania plików można je prosto zpakować w formacie ZIP. Jeśli chcesz je opublikować publicznie, są dwa głównie sposoby: pierwszy to wysłanie plików do oficjalnego katalogu dodatków do WordPress (WordPress.org), co wymaga stosowania wydanych przez nich instrukcji oraz standardów kodu; dzięki temu uzyskasz największą rozpoznawalność; drugi sposób to dystrybucja plików poprzez własną stronę internetową lub platformy sprzedaży dodatków (np. CodeCanyon). Przed wysłaniem plików do oficjalnego katalogu upewnij się, że ich jakość i bezpieczeństwo są na najwyższym poziomie.

Jak dodać do mojego pluginu własne typy artykułów lub kategorie?

Możesz użyćregister_post_type()Funkcja do tworzenia własnych typów artykułów (Custom Post Types, CPT)register_taxonomy()Można stworzyć własną klasifikację za pomocą funkcji. Te operacje zrobią najlepiej w…initDziałyania są wykonywane w związku z aktywacją „hooków”. W dokumentacji WordPress Codex i Developer Handbook znajdują się szczegółowe opisy parametrów tych dwóch funkcji; to doskonały sposób na rozszerzenie możliwości zarządzania treścią w WordPress.

Jak uniknąć konfliktów pomiędzy nazwami funkcji w różnych pluginach?

Aby uniknąć konfliktów nazw funkcji, klas lub stałych, najlepszą praktyką jest używanie przestrzeni nazw (namespace) w PHP 5.3 i wyższych wersjach. Jeśli twoje rozszerzenie musi wspierać starsze wersje PHP lub chcesz zachować maksymalną kompatybilność, możesz dodać unikalny prefiks do wszystkich identyfikatorów. Na przykład, możesz użyć nazwy rozszerzenia lub jej skrótu jako prefiksu.myplugin_function_nameMyPlugin_ClassNameMYPLUGIN_CONSTANTPrzykłady kodu zawarte w tym przewodniku używają metody dodawania prefiksów.