Opanowanie rozwoju wtyczek WordPress od zera: tworzenie własnych funkcji i rozszerzeń

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

Podstawy rozwoju pluginów dla WordPress

Pluginy do WordPress są zbiorem niezależnych skryptów w języku PHP, które rozszerzają funkcje standardowego oprogramowania WordPress. Dzięki nim programiści mogą dodawać nowe funkcje do witryny internetowej lub modyfikować zachowanie istniejących elementów bez konieczności edycji źródłowych plików WordPress. Plugin może składać się z jednego tylko pliku lub złożyć się z kilku plików, skryptów oraz arkuszy stylu.

Zrozumienie podstawowej struktury pluginu

Najważniejszym plikiem w pluginie jest plik główny (main plugin file). Ten plik musi zawierać specjalną nagłówkową notę (plugin header), dzięki której WordPress rozpoznaje twój plugin. Nagłówek pluginu znajduje się zwykle na początku pliku i zawiera informacje takie jak nazwa pluginu, opis, wersja, autor itd. Na przykład, plik główny pluginu o nazwie “Moje powitanie” („My Greeting Plugin”) może wyglądać tak: my-greeting-plugin.php Zaczęcie może wyglądać następnie:

<?php
/**
 * Plugin Name: 我的问候插件
 * Plugin URI:  https://example.com/my-greeting-plugin
 * Description: 一个简单的插件,用于在网站前台显示问候语。
 * Version:     1.0.0
 * Author:      开发者名称
 * License:     GPL v2 or later
 * Text Domain: my-greeting-plugin
 */

Po umieszczeniu nagłówka pliku rozszerzenia możesz zacząć pisanie kodu realizującego funkcje tego pliku. Wszystki kod pliku rozszerzenia powinien być umieszczone w zależnościach (warunkowych instrukcjach), aby zapobiec bezpośredniemu dostępu do niego, co mogłoby powodować problemy z bezpieczeństwem, oraz aby upewnić się, że kod będzie wykonywany wyłącznie w środowisku WordPress.

Polecamy lekturę. Od zera: Jak stworzyć swój pierwszy plugin dla WordPressa

Katalog plików i organizacja plików w rozszerzeniu

Dla pluginów z prostymi funkcjami wystarczy jeden plik w języku PHP. Jednak wraz z rozszerzeniem ich możliwości istotna staje się dobrza organizacja plików. Standardowy katalog z pluginami może mieć następującą strukturę:
- my-plugin/ (Dziennik główny)
- my-plugin.php (W głównym pliku pluginu)
- uninstall.php (Skrypt do odinstalacji)
- includes/ (Katalog zawierający klasy lub funkcje realizujące kluczowe funkcje aplikacji)
- admin/ (Katalog zawierający kod dotyczący administracji w tle)
- public/ (Katalog zawierający kod dotyczący frontendu witryny internetowej)
- assets/ (Katalog zawierający pliki JavaScript, CSS oraz zasoby graficzne)
- languages/ (Katalog, w którym znajdują się pliki z tłumaczeniami międzynarodowymi)

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.

Taka struktura modułowa ułatwia utrzymanie, testowanie oraz współpracę przy programowaniu.

Podstawowe koncepty rozwoju oprogramowania: haczyki (hooks) i filtry (filters)

Podstawa rozwoju pluginów dla WordPress jest systemem zwanyym “hookami” (ang. Hooks). Hooki umożliwiają wstawianie własnego kodu w określone punkty wykonywania aplikacji WordPress, co pozwala modyfikować lub ulepszać jej standardowe zachowanie. Istnieją dwa głównego typy hooków: hooki akcji (Action Hooks) i hooki filtrów (Filter Hooks).

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

Aktywnie działające “haki” (ang. action hooks) są wykonywane w momencie wystąpienia określonych zdarzeń, np. publikacji artykułu, logowania użytkownika lub załadowania strony zarządzania. Nie wracają żadnych wartości do tej, która je wywołała, ale służą do „wykonania jakiejś akcji”. Możesz je używać w swoich aplikacjach. add_action() Funkcja “przyczepia” swoją własną funkcję do jakiegoś „haka akcji” (action hook).

Na przykład, jeśli chcesz dodać własny tekst do nagłówka strony frontowej witryny, możesz to zrobić za pomocą odpowiednich narzędzi lub kodu. wp_footer Ten „hook” do działań. W głównym pliku pluginu możesz to napisać w następujący sposób:

Polecamy lekturę. Święty tekst dla programistów tworzących dodatki do WordPress: Jak stworzyć własne funkcje rozszerzające od zera

Funkcja myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Dziękujemy, że korzystasz z tej witryny!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

Gdy WordPress wykonuje… wp_footer Gdy jest mowa o lokalizacji, automatycznie zostanie wywołany program, który zarejestrowałeś. myplugin_add_footer_text Funkcja.

Można zmienić zawartość za pomocą hooków filtrów.

Hooki filtrów służą do modyfikacji danych. Dzięki nim masz możliwość zmienić dane przed ich wysłaniem do bazy danych lub do przeglądarza. Funkcje filtrów muszą zwracać zmienione wartości. add_filter() Funkcja służy do rejestracji filtrów.

Jednym z częstych przykładów jest modyfikacja nagłówków artykułów. Załóżmy, że chcesz automatycznie dodawać znak zastrzeżenia ® (™) do nagłówków wszystkich artykułów. Można to zrealizować za pomocą odpowiednich narzędzi lub skryptów. the_title Filtr:

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 myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且不是管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Parametry znajdujące się tu. 10 To oznacza priorytet – im mniejszy numer, tym zadanie zostanie wykonane wcześniej.2 To oznacza, że nasza funkcja wywołana w odpowiedzi (callback function) przyjmuje dwa parametry.$title$post_id)。

Stworzenie strony do zarządzania pluginami

Wiele wtyczek wymaga dostępnej na panelu administracyjnym WordPress strony konfiguracji, aby użytkownicy mogli ustawić odpowiednie opcje. WordPress oferuje bogate API do tworzenia głównych i podmenu.

Dodaj menu zarządzania na najwyższym poziomie.

Możesz użyć add_menu_page() Funkcja tworzy niezależny menü sterowania dla twojego pluginu. Do tej funkcji potrzebne są kilka parametrów, m.in.: nagłówek strony, nagłówek menu, uprawnienia użytkowników, alias menu oraz funkcja obsługująca odpowiednie działania (callback function).

Polecamy lekturę. Pełny przewodnik po rozwoju pluginów dla WordPressa: od podstaw po zaawansowane techniki i praktyczne poradы

Następny kod pokazuje, jak dodać prostą stronę z menu najwyższego poziomu:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',       // 所需权限(管理员)
        'myplugin-settings',    // 菜单别名(URL中的slug)
        'myplugin_settings_page', // 用于输出页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(使用Dashicons)
        30                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 定义输出页面内容的回调函数
function myplugin_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
            // 输出设置字段和安全 nonce 字段
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

Utworzenie opcji za pomocą API ustawień

Ręczne obsługiwanie procesów wysyłania i weryfikacji formularzy jest uciążliwe i niebezpieczne. API dostępne w WordPress umożliwia standardyzowaną metodę rejestracji, weryfikacji oraz zapisu ustawień. W tym procesie biorą udział trzy główne funkcje:register_setting()add_settings_section()add_settings_field()

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.

Następny przykład pokazuje, jak zarejestrować grupę ustawień oraz pole tekstowe:

function myplugin_settings_init() {
    // 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
    register_setting(
        'myplugin-settings', // 选项组,通常与页面别名一致
        'myplugin_options',  // 存储在 wp_options 表中的选项名
        'myplugin_sanitize_callback' // 可选的清理回调函数
    );

// 在页面中添加一个区域
    add_settings_section(
        'myplugin_section_main', // 区域的ID
        '主要设置',               // 区域标题
        'myplugin_section_callback', // 区域描述的回调函数
        'myplugin-settings'      // 页面别名
    );

// 向区域中添加一个字段
    add_settings_field(
        'myplugin_field_greeting', // 字段ID
        '问候语',                  // 字段标签
        'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
        'myplugin-settings',      // 页面别名
        'myplugin_section_main',  // 区域ID
        [ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
    $options = get_option( 'myplugin_options' );
    $value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
}

Bezpieczeństwo wtyczek oraz najlepsze praktyki ich stosowania

Rozwinąć popularny plugin, przy czym bezpieczeństwo i jakość kodu są najważniejsze. Niebezpieczny plugin może stać się źródłem ataków na witrynę internetową.

Weryfikacja danych, ich przygotowanie do dalszego wykorzystania oraz użycie specjalnych znaków („escape”)

Nigdy nie ufajdanie w dane wprowadzone przez użytkowników ani w dane pochodzące z bazy danych. Przed każdym ich wykorzystaniem konieczne jest ich sprawdzenie (validacja), oczyszczenie (sanitacja) oraz uwolnienie specjalnych znaków (escapowanie).

  • Weryfikacja: sprawdzenie, czy dane odpowiadają oczekiwanemu formacie lub regułom (np. czy jest to adres e-mail, liczba itd.). Do tego celu można użyć funkcji takich jak… is_email()ctype_digit() lub wyrażenie regularne.
  • Wyczyśczanie: Przed zapisem danych do bazy danych lub ich użyciem w innych celach należy usunąć niebezpieczne lub niepotrzebne elementy. Dla różnych typów danych należy używać odpowiednich funkcji wyczyśczania. sanitize_text_field()(Używane w tekście)sanitize_email()(Dzięki temu adres e-mail jest widoczny w wyszukiwarkach i na innych platformach.)intval()(Dzięki temu można przetwarzać dane typu całego liczba.)
  • Ucieleśnienie: Gdy wyświetlasz dane w HTML, JavaScript lub URL-ach, upewnij się, że są bezpiecznie zaszyfrowane, aby zapobiec atakom typu XSS (Cross-Site Scripting). Do tego celu używaj odpowiednich funkcji. esc_html()esc_attr()esc_url()wp_kses()

Na przykład, przy zapisywaniu i wyświetlaniu opcji powitania, które wcześniej stworzyliśmy:

// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
    $sanitized = [];
    if ( isset( $input['greeting'] ) ) {
        // 清理文本输入
        $sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
    }
    return $sanitized;
}

// 在前台输出问候语时
function myplugin_display_greeting() {
    $options = get_option( 'myplugin_options' );
    $greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    // 在输出到HTML前进行转义
    echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
}

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

Aby twoje wtyczki były dostępne dla użytkowników z całego świata, konieczne jest uwzględnienie aspektów internacionalizacji (i18n). To oznacza, że wszystkie teksty skierowane do użytkowników muszą być umieszczone w funkcjach przeznaczonych do tłumaczeń, aby można je przekładać na inne języki.

WordPress korzysta z frameworku GNU gettext. Podstawową funkcją do tłumaczeń jest… __()(Znak używany do uzyskania przekładu tekstu) i _e()Aby ustawić unikalny tekstowy domen dla swojego pluginu, należy skorzystać z pola dostępnego w nagłówku pluginu (plugin header). Ten tekstowy domen został już wcześniej określony w kodzie pluginu.

W kodzie należy to używać w następujący sposób:

// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );

// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );

// 带占位符的翻译
printf(
    __( '欢迎,%s!', 'my-greeting-plugin' ),
    esc_html( $username )
);

Następnie możesz użyć narzędzia takiego jak Poedit, aby wybrać te ciągi tekstu z kodu i wygenerować z nich odpowiednie pliki. .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 pluginie. /languages/ W katalogu.

Podsumowanie.

Rozwoj pluginów dla WordPress jest potężnym i elastycznym obszarem, który daje programistom możliwość dogłębnego dostosowania i rozszerzenia funkcjonalności tego systemu. Od zrozumienia podstawowej struktury pluginów oraz systemu „hooków” po tworzenie interaktywnych interfejsów administracyjnych, aż po stosowanie surowych zasad bezpieczeństwa i standardów internacionalizacji – każdy krok jest kluczowy przy tworzeniu wysokiej jakości, łatwo utrzymywanych i popularnych pluginów. Pamiętaj, że istotne jest wykorzystywanie bogatej API dostępnej w WordPress, a nie jej ominawanie. Poprzez modułową organizację kodu, ścisłe zarządzanie danymi oraz uwzględnienie wsparcia dla wielu języków od początku, twój plugin będzie nie tylko funkcjonalny, ale także bezpieczny, profesjonalny i gotowy do globalnego rozpowszechnienia.

FAQ – najczęściej zadawane pytania.

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

Aby stworzyć dodatek (plugin) w WordPress, wystarczy co najmniej jednego pliku w formacie PHP. Jeśli ten plik zawiera poprawne komentarze opisujące strukturę dodatku (tzw. „Plugin Header Comments”), WordPress będzie w stanie go rozpoznać i aktywować w liście dostępnych dodatków w swoim backendzie. Ten jeden plik może zawierać cały kod potrzebny do działania dodatku.

Jak uniknąć konfliktów pomiędzy nazwami pluginów a nazwami innych pluginów?

Aby uniknąć konfliktów między nazwami funkcji, klas lub stałych a nazwami innych pluginów lub tematów, należy używać unikalnych prefiksów. Najczęściej taki prefiks może być oparty na nazwie twojego pluginu lub jego skróceniu. Na przykład, jeśli twój plugin nosi nazwę “Awesome Slider”, możesz użyć prefiksu „AS”. as_awesome_slider_ Jako prefiks dla wszystkich funkcji i klas. W przypadku nazw klas można zastanowić się nad bardziej unikalną strukturą opartą na zasadach nazwanych przestrzeni (namespace).

Jak usunąć dane z bazy danych podczas odinstalowania wtyczki?

WordPress oferuje dwa sposoby na usunięcie niepotrzebnych plików po odinstalowaniu wtyczki. Pierwszy polega na zarejestrowaniu „hooka odinstalowania” (uninstallation hook) w pliku głównego wtyczki. register_uninstall_hook() Funkcja umożliwia określenie funkcji zwrotnej (callback), która ma za zadanie usunąć tabele danych i opcje utworzone przez dodatek (plugin). Drugi, i bardziej zalecany, sposób to stworzenie odrębnej funkcji do wykonywania tego zadania. uninstall.php Plik. Gdy użytkownik usuwa wtyczkę za pomocą panelu administracyjnego WordPress, WordPress automatycznie wykona kod zawarty w tym pliku. W tym pliku należy sprawdzić wartości stałych (constantów). WP_UNINSTALL_PLUGIN Czy należy najpierw sprawdzić, czy dane pluginów zostały definiowane, a potem bezpiecznie usunąć je?

Jak powinienem dodać pliki JavaScript i CSS do mojego pluginu?

Powinnoś używać funkcji związanych z kolejkami (queues) dostępnych w WordPress, aby poprawnie dodawać skrypty i arkusze stylu, zamiast wyświetlać je bezpośrednio w HTML. <script><link> Tagi. W przypadku zasobów front-end należy je używać. wp_enqueue_script()wp_enqueue_style() Funkcje i ich zamontowanie. wp_enqueue_scripts Akcje są przypisane do odpowiednich „haków” (hooków). W przypadku zasobów znajdujących się w administracyjnym interfejsie, są one montowane (mountowane) w odpowiednich miejscach. admin_enqueue_scripts Na haczkach. To zapewnia poprawne obsługiwanie zależności pomiędzy elementami aplikacji oraz unikanie powtarzalnego ładowania tej samej rzeczywistości (zasobu).

Jak debugować w czasie tworzenia pluginów?

Najpierw upewnij się, że masz wszystko niezbędne w swoim… wp-config.php Włącz tryb debugowania WordPressa w pliku. WP_DEBUG Konstanta ustawiona jest na… trueMożesz też włączyć to wszystko jednocześnie. WP_DEBUG_LOG(Zapisywać błędy do pliku) i WP_DEBUG_DISPLAY(Po ekranie wyświetlony błąd). Użyj. error_log() Funkcja zapisała informacje o debugowaniu do logu błędów na serwerze. Ponadto do debugowania żądań JavaScript i AJAX można używać konsoli oraz panelu sieciowego w narzędziach developerskich przeglądarki. W przypadku złożonej logiki można zastanowić się nad użyciem profesjonalnych narzędzi do debugowania PHP, np. Xdebug.