Pełny przewodnik po tworzeniu pluginów dla WordPressa: jak stworzyć swój pierwszy plugin z niczego

3 minuty na przeczytanie.
2026-03-19
2026-06-03
2,725
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. Do przygotowania lokalnego środowiska rozwoju zaleca się użyć narzędzi takich jak XAMPP, MAMP lub Local by Flywheel, które umożliwiają szybko uruchomienie na komputerze lokalnym serwera obsługującego PHP i MySQL.

Tworzenie podkatalogu i plików bazowych dla pluginu

Każdy plugin WordPress musi mieć plik główny, który stanowi punkt wejścia do pluginu. Najpierw musisz go utworzyć w środowisku WordPress. wp-content/plugins Utworz kopię foldera w katalogu, na przykład: my-first-pluginNastępnie w tym folderze utwórz główny plik PHP, który zwykle ma taką samą nazwę jak folder. my-first-plugin.php

Na początku tego pliku głównego musi znajdować się standardowa komenda położenia nagłówka zawierająca informacje o pluginie. WordPress używa tych informacji do identyfikacji i wyświetlania twojego pluginu w interfejsie administracyjnym.

Polecamy lekturę. Od zera do jednego: pokazujemy ci, jak opanować kluczowe umiejętności przy tworzeniu pluginów dla 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
 */

Zrozumienie podstawowej struktury rozwoju pluginów dla WordPress

W pełni funkcjonalnym pluginie zwykle znajduje się więcej niż jeden plik. Poza plikiem głównym mogą występować pliki z kodem JavaScript, CSS, zdjęciami oraz inne pliki zasobowe, a także pliki językowe używane do realizacji funkcji internationalizacji. Rozsądna struktura katalogów pomaga w organizacji i utrzymaniu kodu.

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.

Zalecana struktura jest następująca:
- my-first-plugin/ (Katalog źródłowy wtyczki)
- my-first-plugin.php (Główny plik)
- includes/ (Warto umieścić tu pliki zawierające klasy lub funkcje realizujące kluczowe funkcje aplikacji.)
- admin/ (Kod dotyczący interfejsu administracyjnego w tle)
- public/ (Miejsce na kod związany z prezentacją na stronie klienta)
- assets/ (Miejsce na pliki związane z CSS, JavaScriptem, zdjęciami oraz innymi zasobami)
- languages/ (Miejsce na pliki z tłumaczeniami międzynarodowymi)

Pisanie kodu w języku PHP

Wszystka logika funkcji wtyczek jest implementowana za pomocą kodu PHP. WordPress oferuje wiele różnych wtyczek, które mogą rozszerzyć możliwości platformy.动作钩子过滤器钩子To jest podstawa interakcji pomiędzy pluginem a core’em WordPress.

Zrealizuj prostą funkcję, którą można opisać krótkim kodem.

Krótkie kody to potężne narzędzia, które ułatwiają użytkownikom włączenie funkcji dodatkowych (pluginów) do tekstów artykułów lub stron internetowych. Zrealizujemy prosty krótki kod, który wyświetli powitanie na stronie.

W twoim głównym pliku… my-first-plugin.php Poniżej komentarza umieszczonego w nagłówku dodaj następujące funkcje i hooki:

Polecamy lekturę. Szczegółowa analiza tworzenia wtyczek do WordPressa: od zera do stworzenia swojego pierwszego rozszerzenia funkcjonalnego.

// 注册短代码
function mfp_greeting_shortcode( $atts ) {
    // 使用 shortcode_atts 设置默认参数并合并用户传入的参数
    $atts = shortcode_atts( array(
        'name' =&gt; '访客',
    ), $atts, 'mfp_greeting' );

// 返回要显示的内容
    return '<p>'Witaj!' . esc_html($atts['name']) . „! Bądź witany w użyciu mojego pierwszego pluginu.”</p>'add_shortcode( 'mfp_greeting', 'mfp_greeting_shortcode' );

Teraz użytkownicy mogą wpisywać tekst w edytorze artykułów. [mfp_greeting name=“小明”]Wtedy na stronie front-endu pojawi się tekst: “Cześć, Xiao Ming! Witaj z moim pierwszym pluginem.”

Dodaj opcję ustawienia w backendzie.

Aby funkcje dodatku były konfigurowalne, zwykle konieczne jest dodanie strony z ustawieniami. Tutaj pokazano, jak dodać podmenę do menu “Ustawienia”.

Najpierw użyjemy… add_action Układzenie haczyków (hooków) jest dokonane podczas inicjalizacji przez administratora.

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 mfp_settings_init() {
    // 注册一个新的设置 section
    add_settings_section(
        'mfp_settings_section', // section ID
        '我的插件设置', // 标题
        'mfp_settings_section_callback', // 回调函数,用于输出 section 描述
        'general' // 显示在哪个设置页,这里是“常规”设置页
    );

// 在 section 内注册一个字段
    add_settings_field(
        'mfp_default_greeting', // 字段 ID
        '默认问候人名', // 字段标题
        'mfp_default_greeting_callback', // 渲染字段输入框的回调函数
        'general', // 设置页面
        'mfp_settings_section' // 所属 section
    );

// 在 WordPress 的 `option` 表中注册这个设置
    register_setting( 'general', 'mfp_default_greeting' );
}
add_action( 'admin_init', 'mfp_settings_init' );

Następnie należy definiować dwie wyżej wspomniane funkcje zwrotne (callback functions), które będą używane do renderowania interfejsu użytkownika:

// Section 描述的回调函数
function mfp_settings_section_callback() {
    echo '<p>Tu konfiguruję opcje dotyczące mojego pierwszego pluginu.</p>';
}

// 字段输入框的回调函数
function mfp_default_greeting_callback() {
    // 从数据库获取已保存的值,如果没有则使用默认值
    $option = get_option( 'mfp_default_greeting', 'WordPress 用户' );
    // 输出一个输入框
    echo '<input type="text" name="mfp_default_greeting" value="' . esc_attr( $option ) . '" />';
}

Teraz możesz zobaczyć tę opcję ustawień na dole strony “Ustawienia -> Ogólne” w panelu administracyjnym WordPress.

Używanie zasobów front-end oraz interakcje z technologią Ajax

Współczesne pluginy często wymagają własnych stylów i logiki interakcji. WordPress oferuje standardowe metody do bezpiecznego dodawania i ładowania plików CSS oraz JavaScript.

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

Bezpieczne ładowanie plików CSS i JavaScript

Nigdy nie wpisywać kodu bezpośrednio do plików PHP. <link><script> Etykiety są kodowane na stałe w ścieżce do zasobów. Należy użyć wp_enqueue_stylewp_enqueue_script Funkcja.

// 注册并加载前端资源
function mfp_enqueue_public_assets() {
    // 加载一个 CSS 文件
    wp_enqueue_style(
        'mfp-public-style', // 样式表句柄
        plugin_dir_url( __FILE__ ) . 'assets/css/public-style.css', // 样式表 URL
        array(), // 依赖项
        '1.0.0' // 版本号,可用于清除缓存
    );

// 加载一个 JavaScript 文件
    wp_enqueue_script(
        'mfp-public-script', // 脚本句柄
        plugin_dir_url( __FILE__ ) . 'assets/js/public-script.js', // 脚本 URL
        array( 'jquery' ), // 依赖项,这里依赖 jQuery
        '1.0.0',
        true // 是否在页面底部加载
    );

// 重要:将 PHP 变量安全地传递到 JavaScript
    wp_localize_script(
        'mfp-public-script',
        'mfp_ajax_object', // 在 JS 中访问的对象名
        array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => wp_create_nonce( 'mfp_ajax_nonce' ),
            'default_name' => get_option( 'mfp_default_greeting', 'WordPress 用户' )
        )
    );
}
// 在前端页面加载资源
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_public_assets' );
// 在后台管理页面加载资源(如果需要)
// add_action( 'admin_enqueue_scripts', 'mfp_enqueue_admin_assets' );

Implementowanie prostego żądania Ajax

Ajax umożliwia komunikację z serwerem bez konieczności aktualizowania strony. WordPress posiada wewnętrzny procesor obsługujący funkcje Ajax.

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.

Najpierw, w pliku JavaScript na stronie klienta (frontend): public-script.js wysyłać żądanie do:

jQuery(document).ready(function($) {
    $('#my-button').on('click', function(e) {
        e.preventDefault();
        $.post(
            mfp_ajax_object.ajax_url, // WordPress 提供的 Ajax URL
            {
                action: 'mfp_get_server_time', // 触发的 PHP 钩子标识
                nonce: mfp_ajax_object.nonce, // 安全随机数
            },
            function(response) {
                if (response.success) {
                    $('#result-container').html('服务器时间:' + response.data);
                } else {
                    alert('请求失败:' + response.data);
                }
            }
        );
    });
});

Następnie, na stronie PHP należy obsługić tę żądanie. Konieczne jest przygotowanie funkcji obsługujących proces rejestracji dla użytkowników zalogowanych oraz niezalogowanych – albo osobno, albo jednocześnie.

// 处理 Ajax 请求的函数
function mfp_ajax_get_server_time() {
    // 验证 nonce,防止 CSRF 攻击
    check_ajax_referer( 'mfp_ajax_nonce', 'nonce' );

// 处理逻辑
    $server_time = current_time( 'mysql' );

// 返回成功响应(JSON 格式)
    wp_send_json_success( $server_time );
}
// 为登录用户注册处理函数
add_action( 'wp_ajax_mfp_get_server_time', 'mfp_ajax_get_server_time' );
// 为未登录用户注册处理函数(如果功能允许)
add_action( 'wp_ajax_nopriv_mfp_get_server_time', 'mfp_ajax_get_server_time' );

Internacjonalizacja pluginów oraz przygotowanie do ich publikacji

Aby twoje wtyczki były dostępne dla użytkowników WordPress na całym świecie, internacionalizacja (ang. i18n) jest koniecznym krokiem. Równie ważne jest dokładne testowanie i optymalizowanie przed ich publikacją.

Użyj funkcji gettext do realizacji tłumaczeń tekstu.

WordPress korzysta z frameworku GNU gettext do tłumaczeń. Wszystkie teksty przeznaczone dla użytkowników muszą zostać umieszczone w specjalnych obiektach, definiowanych za pomocą określonych funkcji.

Zmodyfikuj funkcję skróconego kodu, aby obsługiwała tłumaczenie.

function mfp_greeting_shortcode_i18n( $atts ) {
    $atts = shortcode_atts( array(
        'name' =&gt; __( '访客', 'my-first-plugin' ), // 默认值也可翻译
    ), $atts, 'mfp_greeting' );

// 使用 sprintf 和 __ 函数组合翻译字符串
    return '<p>' . sprintf( __( '你好,%s!欢迎使用我的第一个插件。', 'my-first-plugin' ), esc_html( $atts['name'] ) ) . '</p>'add_shortcode( 'mfp_greeting', 'mfp_greeting_shortcode_i18n' );

Musisz użyć narzędzi takich jak Poedit, aby skanować wszystkie elementy w pluginach, które są podobne… __(‘文本’, ‘my-first-plugin’) String, generate .pot Pliki szablonów, a potem dla każnego języka (np. chińskiego) tworzyć odpowiednie wersje tych plików. .po I po skompilowaniu. .mo Pliki, i umieść je w… /languages Spis treści.

Przeprowadzenie ostatecznych testów oraz usprządzania kodu.

Przed opublikowaniem dodatku koniecznie sprawdź następujące punkty:
1. Testy funkcjonalności: Aktywuj plugin w nowo zainstalowanym WordPressie i sprawdź, czy wszystkie funkcje (skróty, ustawienia, Ajax itd.) działają tak, jak powinny.
2. Recenzja kodu: Sprawdź, czy we wszystkich przypadkach użyto dane wprowadzone przez użytkownika. esc_html, esc_attr, wp_kses_post Funkcje takie jak escape są używane do zabezpieczenia danych podczas wykonywania operacji z bazą danych. Czy wszystkie zapytania do bazy danych wykorzystują te funkcje? $wpdb Klasy zawierają zapisy instrukcji przygotowawczych, które zapobiegają atakom typu SQL injection.
3. Sprawdzenie wydajności: upewnij się, że skrypty i style są ładowane tylko na potrzebnych stronach (można to uzyskać poprzez użycie warunkowych tagów, np. is_admin(), is_single() Wykonuj oceny (judgments) w taki sposób, aby uniknąć niepotrzebnych zapytań do bazy danych przy każdym ładowaniu strony.
4. Sprzączanie plików: Usunąć kod diagnostyczny używany w procesie rozwoju, niepotrzebne komentarze oraz nie używane pliki.
5. Plik README: Stwórz dokładny opis produktu lub projektu. readme.txt Plik musi mieć format zgodny z wymaganiami WordPress.org i musi zawierać opis pluginu, instrukcje do instalacji, najczęściej występujące pytania itd. Jest to wymagany plik do złożenia pluginu do oficjalnego katalogu WordPress.

Podsumowanie.

Dzięki temu poradnikowi udało ci się stworzyć pełnowartościowy plugin WordPress od początkowego pliku pustego po plugin, który obsługuje krótkie kody, ustawienia na stronie serwera, ładowanie zasobów front-endu, interakcje typu Ajax oraz wsparcie dla języków różnych narodów. Kluczowe kroki to: przygotowanie środowiska i stworzenie głównego pliku z standardowymi nagłówkami; włączenie funkcji za pomocą haków akcji (action hooks) i haków filtrów (filter hooks); bezpieczne zarządzanie plikami zasobów; realizacja asynchronicznej komunikacji pomiędzy front-endem a back-endem; a także przygotowanie pliku do tłumaczeń i testów przed publikacją na całym świecie. Pamiętaj, że bezpieczeństwo (ekwivalencja znaków, walidacja danych, wykorzystanie tokenów typu nonce), wydajność (ładowanie zasobów według potrzeb) oraz standardy (zgodność z zasadami kodowania WordPress) stanowią trzy fundamentalne elementy przy tworzeniu wysokiej jakości pluginów. Dalsze uczenie się i stosowanie zaawansowanych API, takich jak tworzenie własnych typów artykułów, REST API oraz edytora typu Blocks, sprawi, że twój plugin będzie jeszcze skuteczniejszy.

FAQ – najczęściej zadawane pytania.

Czy do rozwoju wtyczek konieczne jest stosowanie programowania obiektowego?

Nie musi tak być. W przypadku prostych wtyczek programowanie proceduralne (zawierające zestaw funkcji) jest w pełni dozwolone i nawet prostsze w użyciu. Jednakże dla większych, złożonych wtyczek zaleca się programowanie obiektowe (OOP) i struktury klasowe, które umożliwiają lepszą organizację kodu, zabezpieczają jego modułowość i powtarzalność, a także zmniejszają ryzyko konfliktów nazw.

Jak debugować problemy w pluginach WordPress?

Najpierw upewnij się, że na wp-config.php Uwolniono dostęp do pliku. WP_DEBUGWP_DEBUG_LOG Konstanta – w ten sposób informacje o błędach zostaną zapisane. /wp-content/debug.log W pliku informacje są przechowywane, ale nie są wyświetlone użytkownikowi. Ponadto można zastosować inne metody lub rozwiązania, aby te informacje były dostępne w odpowiedni sposób. error_log() Funkcja wyświetla wartości zmiennych w logach. Dla przypadków używania technologii Ajax lub złożonej logiki narzędzia do debugowania w narzędziach rozwojowych przeglądarek, takie jak panele “Sieć” (Network) i “Konsola” (Console), są niezbytne.

Jak moja wtyczka może współpracować z tematem lub innymi wtyczkami?

Najlepsze zasady zachowania kompatybilności to: ścisłe stosowanie oficjalnego API WordPress oraz standardów kodowania; dodawanie unikalnych prefiksów do nazw funkcji, klas i hooków (jak wspomniano wcześniej). mfp_Aby uniknąć konfliktów, sprawdź, czy istnieją dane lub funkcje globalne, zanim je użyjesz (wykorzystaj odpowiednie metody sprawdzania). function_exists()class_exists()W dokumencie musisz jasno opisać tabeli bazy danych, które zostały stworzone przez twój plugin, a także wyjaśnić, w jaki sposób te tabeli są używane w funkcjonalności aplikacji.选项用户元数据

Jakich wymagań należy spełnić, aby plugin został złożony do katalogu WordPress.org?

Musisz mieć konto na WordPress.org i upewnić się, że wtyczka jest w pełni zgodna z oficjalnymi wymaganiami. Obejmują one: kod zgodny z licencją GPL (zwykle GPLv2+); wtyczka musi być w 100% otwarta i niezależna od zewnętrznych usług płatnych, aby móc uruchomić podstawowe funkcje; zawierać standardowe formaty. readme.txt W pliku oraz kodzie nie znajduje się żadnego złośliwego lub niepotrzebnego zawartości; ponadto plik przeszedł sprawdzenie przez zespół ds. audycji. Przed złożeniem pliku prosimy uważnie przeczytać oficjalny manual do rozwoju pluginów oraz instrukcje dotyczące procedury ich wysyłania.