Opanowanie rozwoju pluginów dla WordPress od zera: pełny przewodnik i praktyczne instrukcje

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

Czemu warto rozwijać dodatki do WordPress?

W dzisiejszym ekosystemie stron internetowych WordPress dominuje dzięki swojej bezkonkurencyjnej elastyczności i ogromnej bazie użytkowników. Ta elastyczność w dużej mierze wynika z jego systemu rozszerzeń (pluginów). Rozwojem własnych rozszerzeń programiści mogą przekształcić swoje idee w moduły funkcjonalne, które można używać na milionach stron internetowych na całym świecie. To nie tylko umożliwia zaspokojenie specyficznych potrzeb biznesowych, ale także daje możliwość generowania dodatkowej wartości i dochodu poprzez oficjalny katalog WordPress lub rynki dostępne od stron trzecich.

W odróżnieniu od przypadków, gdy temat jest modyfikowany bezpośrednio… functions.php Plaginy oddzielają logikę funkcji od wyglądu tematów, co zapewnia łatwość utrzymania witryny w dobrym stanie. Gdy zmieniasz temat, funkcje dostępne w plaginach przenoszą się bez problemów, natomiast kod napisany w temacie wymaga ponownego przetworzenia. Taki modułarny sposób rozwoju jest najlepszą praktyką przy tworzeniu profesjonalnych, stabilnych stron na platformie WordPress.

Stwórz swój pierwszy plugin.

Pierwszy krok w rozwoju pluginu to stworzenie podstawowej struktury, która spełnia standardy WordPress. Nie chodzi tu tylko o tworzenie jednego pliku, ale o ustanowienie sposobu organizacji kodu, który jest łatwy w utrzymaniu i rozszerzaniu.

Polecamy lekturę. Przewodnik po rozwoju pluginów dla WordPress: jak stworzyć swoją pierwszą własną funkcję rozszerzającą od zera

Tworzenie pliku z kluczowymi elementami pluginu

Każdy plugin WordPress musi mieć plik główny, który zwykle nosi nazwę pluginu. my-first-plugin.phpKomentarze umieszczone na początku tego pliku stanowią “danych tożsamości” pluginu – informacje, które są udostępniane systemowi WordPress. Te informacje obejmują nazwę pluginu, opis, wersję, autora itd. Bez tych komentarzy WordPress nie będzie w stanie rozpoznać i aktywować twoj plugin.

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

Implementowanie prostej funkcji

Po określeniu struktury nagłówka pliku rozszerzenia można zacząć dodawać kod realizujący potrzebne funkcje. Klasycznym przykładem na początek jest dodanie linii tekstu według ustawienia na dole strony internetowej. To wymaga wykorzystania mechanizmu “hooków” w WordPress. Konkretnie mowa o funkcji, która jest wyzwana w określonym momencie działania systemu. wp_footer Ten aktywny hook.

// 在 wp_footer 钩子上挂接我们的函数
add_action(‘wp_footer’, ‘my_first_plugin_display_footer_text’);

/**
 * 在网站前台页脚输出自定义文本
 */
function my_first_plugin_display_footer_text() {
    echo ‘<p style="“text-align:" center;”>Techniczna podpora dla tego serwisu jest zapewniana przez moje pierwsze rozszerzenie (plugin).</p>’;
}

Dodaj powyższy blok kodu do swojego głównego pliku pluginu, zapisz go, a potem wdroż go na serwer. /wp-content/plugins/ Katalog. Następnie wejdź na stronę “Dodatki” w panelu administracyjnym WordPress i tam ujrzysz swoj pierwszy dodatek oraz będziesz mógł go aktywować. O aktualizuj stronę internetową i tekst, który dodałeś, pojawi się na dole strony.

Głębokie zrozumienie architektury pluginów WordPress

Aby stworzyć skuteczny i profesjonalny plugin, konieczne jest głębokie zrozumienie podstawowych interfejsów programowania oraz wzorców architektury dostępnych w WordPress. Nie chodzi tu tylko o pisanie funkcji w języku PHP, ale także o naukę bezpiecznego i efektywnego interakcjonowania z core’em WordPress.

Mechanizm „haków” (hooks): działania i filtry

Mechanizm hooków w WordPress jest kluczowym elementem jego rozszerzalności i składa się z hooków akcji (Action Hooks) oraz hooków filtrów (Filter Hooks). Hooki akcji umożliwiają wykonywanie własnego kodu w określonych momencach. Na przykład…init Hooki są aktywowane podczas inicjalizacji WordPress.wp_enqueue_scripts Hakówki (ang. hooks) są używane do bezpiecznego dodawania skryptów i stylów.

Polecamy lekturę. Pełny przewodnik po tworzeniu pluginów dla WordPressa: stworzenie swojego pierwszego funkcjonalnego pluginu od zera

Filtry z hookami umożliwiają modyfikację danych. Możesz ich interweniować i zmieniać, zanim zostaną wykorzystane (np. wyświetlone na stronie lub zapisane do bazy danych).the_content Filtry umożliwiają modyfikację treści artykułów.

// 使用过滤器修改文章内容,在末尾添加一段话
add_filter(‘the_content’, ‘my_first_plugin_modify_content’);

function my_first_plugin_modify_content($content) {
    if (is_single()) { // 仅在单篇文章页面生效
        $extra_text = ‘<div class="“plugin-note”">Dziękuję za przeczytanie tego artykułu!</div>’;
        $content .= $extra_text;
    }
    return $content;
}

Bezpieczeństwo wtyczek i walidacja danych

Bezpieczeństwo to element, który nie może być ignorowany przy tworzeniu wtyczek. Nigdy nie możesz ufać danym pochodzącym od użytkowników lub z zewnętrznych źródeł. WordPress oferuje szereg funkcji, które pomagają w walidacji, escape’owaniu i czyszczeniu danych.

Gdy obsługuje się dane typu $_POST lub $_GET pochodzące z formularza, konieczne jest użycie określonych procedur lub narzędzi. sanitize_text_field(), intval(), wp_kses_post() Można użyć funkcji takich jak „clean()” do przygotowania danych. Przed wyświetleniem danych na stronie HTML konieczne jest ich uprządnienie, aby uniknąć błędów i niejasności. esc_html(), esc_attr(), esc_url() Funkcje takie jak escape są używane do zapobiegania atakom typu XSS (Cross-Site Scripting).

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 my_first_plugin_safe_shortcode($atts) {
    // 使用 shortcode_atts 设置默认值并合并用户输入
    $atts = shortcode_atts(
        array(
            ‘message’ =&gt; ‘Hello World’,
        ), $atts
    );

// 清理用户输入的 message 属性
    $safe_message = sanitize_text_field($atts[‘message’]);

// 转义后安全输出
    return ‘<div>’ . esc_html($safe_message) . ‘</div>’php
add_shortcode(‘safe_greeting’, ‘my_first_plugin_safe_shortcode’);

Stworzenie kompletnie funkcjonalnego pluginu

Połączmy te informacje, by stworzyć nieco bardziej złożony, ale przydatny plugin – plugin do oszacowania czasu potrzebnego na przeczytanie artykułu. Ten plugin automatycznie obliczy przybliżony czas potrzebny na przeczytanie tekstu i wyświetli go pod nagłówkiem artykułu.

Stworzenie struktury klasy pluginu

Dla pluginów z nieco bardziej złożoną funkcjonalnością lepszym wyborem jest użycie struktury klas opartej na programowaniu obiektowym (OOP – Object-Oriented Programming). Pomaga to w organizacji kodu, uniknięciu konfliktów nazw funkcji oraz poprawieniu łatwości utrzymania programu.

<?php
/**
 * Plugin Name:       文章阅读时间估算
 */
class Article_Reading_Time {
    /**
     * 构造函数,初始化插件
     */
    public function __construct() {
        // 在文章内容前添加阅读时间
        add_filter(‘the_content’, array($this, ‘add_reading_time_to_content’));
        // 初始化脚本和样式(如果需要)
        add_action(‘wp_enqueue_scripts’, array($this, ‘enqueue_assets’));
    }

/**
     * 计算文章的阅读时间(以分钟计)
     * @param string $content 文章内容
     * @return int 预计阅读分钟数
     */
    private function calculate_reading_time($content) {
        // 去除 HTML 标签,只计算纯文本
        $text = strip_tags($content);
        // 估算中文阅读速度:每分钟约300-500字,这里取400字/分钟
        $word_count = mb_strlen($text, ‘UTF-8’);
        $reading_time = ceil($word_count / 400);
        // 至少1分钟
        return max(1, $reading_time);
    }

/**
     * 在文章内容前添加阅读时间显示
     * @param string $content 原始文章内容
     * @return string 添加阅读时间后的内容
     */
    public function add_reading_time_to_content($content) {
        // 确保只在主循环的单篇文章页面显示
        if (is_single() && in_the_loop() && is_main_query()) {
            $reading_minutes = $this->`calculate_reading_time($content);`  
`$reading_time_html = sprintf(‘`‘<div class="“reading-time”"><strong>Oczekiwany czas czytania:</strong>%d minut</div>’,
                esc_html($reading_minutes)
            );
            $content = $reading_time_html . $content;
        }
        return $content;
    }

/**
     * 加载插件所需的CSS样式
     */
    public function enqueue_assets() {
        if (is_single()) {
            wp_enqueue_style(
                ‘article-reading-time-style’,
                plugin_dir_url(__FILE__) . ‘assets/css/style.css’,
                array(),
                ‘1.0.0’
            );
        }
    }
}

// 实例化插件类,启动插件
new Article_Reading_Time();

Dodaj stronę z ustawieniami administracyjnymi.

Profesjonalny plugin zwykle wymaga strony konfiguracji w backendzie, która umożliwia użytkownikom dostosowanie jego działania. Możemy skorzystać z “API do konfiguracji” w WordPress, aby standardowo stworzyć taką stronę.

Polecamy lekturę. Kompletny przewodnik po tworzeniu motywów w WordPressie: od podstaw do zaawansowanych technik.

Najpierw musimy dodać nową metodę do klasy pluginu, która służy do rejestracji menu ustawień oraz polów.

// 在构造函数中添加管理菜单钩子
add_action(‘admin_menu’, array($this, ‘add_admin_menu’));
add_action(‘admin_init’, array($this, ‘register_settings’));

public function add_admin_menu() {
    add_options_page(
        ‘阅读时间设置’,          // 页面标题
        ‘阅读时间估算’,          // 菜单标题
        ‘manage_options’,       // 权限
        ‘reading-time-settings’, // 菜单slug
        array($this, ‘render_settings_page’) // 回调函数
    );
}

public function register_settings() {
    register_setting(‘reading_time_settings_group’, ‘reading_time_words_per_minute’);
    add_settings_section(‘reading_time_main’, ‘主要设置’, null, ‘reading-time-settings’);
    add_settings_field(
        ‘words_per_minute’,
        ‘每分钟阅读字数’,
        array($this, ‘render_words_per_minute_field’),
        ‘reading-time-settings’,
        ‘reading_time_main’
    );
}

public function render_words_per_minute_field() {
    $value = get_option(‘reading_time_words_per_minute’, 400);
    echo ‘<input type="“number”" name="“reading_time_words_per_minute”" value="“’" . esc_attr($value) ‘” />’;
    echo ‘<p class="“description”">Wartość referencyjna używana do obliczenia czasu potrzebnego na przeczytanie (słowa na minutę).</p>’;
}

public function render_settings_page() {
    ?&gt;
    <div class="“wrap”">
        <h1>Ustawienie metody oceny czasu potrzebnego na przeczytanie artykułu</h1>
        <form action="/pl/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
            <?php
            settings_fields(‘reading_time_settings_group’);
            do_settings_sections(‘reading-time-settings’);
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

// 然后修改 calculate_reading_time 方法,使用用户设置的值
private function calculate_reading_time($content) {
    $text = strip_tags($content);
    $words_per_minute = get_option(‘reading_time_words_per_minute’, 400);
    $word_count = mb_strlen($text, ‘UTF-8’);
    $reading_time = ceil($word_count / $words_per_minute);
    return max(1, $reading_time);
}

Internacjonalizacja pluginów oraz przygotowanie do ich publikacji

Aby twoje dodatkowe funkcje (pluginy) były dostępne dla użytkowników z całego świata, internacionalizacja (ang. internationalization, skr. i18n) jest niezbędnym krokiem. Równie istotne jest dokładne testowanie oraz przygotowanie dokumentacji przed ich publikacją.

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.

Rozwijanie funkcji tłumaczenia tekstu

WordPress wykorzystuje technologię GNU gettext do obsługi wielu języków. Wszystkie teksty wyświetlające się bezpośrednio w pluginach muszą zostać umieszczone w ramach określonych funkcji. Najczęściej używana jest funkcja `_gettext()`. __() Zawartość, która ma zostać przetłumaczona, wraz z informacjami o tym, w jaki sposób zostanie zwrócona. _e() Wykorzystywany do bezpośredniego wyświetlania przetłumaczonego tekstu.

Najpierw należy zmienić wszystkie teksty zawarte w pliku składniku (pluginu) w postaci stałych, bezwzględnych kodów (hard-coded text).

// 在插件头部定义 Text Domain
// Text Domain:       article-reading-time

// 在插件初始化时加载语言文件
add_action(‘init’, array($this, ‘load_textdomain’));

public function load_textdomain() {
    load_plugin_textdomain(
        ‘article-reading-time’,
        false,
        dirname(plugin_basename(__FILE__)) . ‘/languages/’
    );
}

// 修改输出文本的代码,使其可翻译
$reading_time_html = sprintf(
    ‘<div class="“reading-time”"><strong>%s</strong>%d %s</div>’,
    esc_html__(‘预计阅读时间:’, ‘article-reading-time’),
    esc_html($reading_minutes),
    esc_html(_n(‘分钟’, ‘分钟’, $reading_minutes, ‘article-reading-time’))
);

Następnie należy użyć narzędzia typu Poedit, aby skanować źródłowy kod wtyczki i wygenerować niezbędne pliki. .pot Pliki szablonów – na ich podstawie można tworzyć różne elementy interfejsu użytkownika. zh_CN.po.mo Przekaż plik z tłumaczeniem i umieść go w pluginie. /languages/ W katalogu.

Testowanie i wysyłanie do oficjalnego katalogu

Przed opublikowaniem koniecznie sprawdź wszystkie funkcje pluginu w różnych środowiskach (różne wersje PHP, różne wersje WordPress). Sprawdź, czy nie występują żadne ostrzeżenia lub błędy związane z PHP, a także upewnij się, że nie dochodzi do konfliktów z popularnymi tematami i innymi pluginami.

Jeśli planujesz złożyć plik do oficjalnego katalogu dodatków WordPress, musisz stosować surowe standardy i wytyczne dotyczące kodu. To obejmuje używanie unikalnych, opisowych prefiksów dla nazw funkcji i klas, zapewnienie bezpieczeństwa kodu oraz podanie dokładnych informacji o jego strukturze i działaniu. readme.txt Plik musi mieć odpowiedni format, zgodny z oficjalnymi standardami, a także musi zostać wyeliminowany cały kod diagnostyki (debugging code).

Przygotuj jasny i zrozumiały tekst. readme.txt Plik jest kluczowym elementem w procesie sprawdzenia. Powinien zawierać opis wtyczki, instrukcje instalacji, zdjęcia ekranu, najczęściej występujące pytania, logi aktualizacji oraz inne istotne informacje.

Podsumowanie.

Rozwoj pluginów dla WordPress jest doskonałym sposobem na przekształcenie kreatywnych idei w produkty gotowe do dystrybucji. Počynając od tworzenia prostego pluginu składającego się z jednego pliku, możesz stopniowo rozwijać swoje umiejętności, poznając mechanizmy hooków, zasady bezpieczeństwa, architekturę obiektową, API oraz funkcje internationalizacji. Ten szlak nauki zapewni ci solidne podstawy do stworzenia pluginów na poziomie biznesowym. Kluczowym elementem jest zrozumienie fundamentalnych mechanizmów interakcji w WordPress (zwanych hookami) oraz stosowanie zasad bezpiecznego programowania i weryfikacji danych. Organizując kod w sposób modułowy i strukturalny, a także wcześniejsze planowanie interfejsu użytkownika i wsparcia dla tłumaczeń, twoje pluginy będą charakteryzować się większą profesjonalnością, łatwością utrzymania oraz adaptacją do wymagań rynku. Pamiętaj, że dobry plugin to nie tylko zbiór funkcji, ale także wyraz połączenia doświadczenia użytkownika, jakości kodu oraz zintegrowanego ekosystemu.

FAQ – najczęściej zadawane pytania.

Jaki jest wymagany poziom wiedzy, by rozwijać dodatki do WordPress?

Konieczne jest posiadanie solidnych umiejętności programowania w PHP, ponieważ istotna część logiki pluginu jest napisana w tym języku. Ponadto należy znać podstawy HTML, CSS i JavaScript, aby móc obsługiwać wygląd i interakcje na stronie internetowej. Wiedza o podstawach bazy danych MySQL (chociaż WordPress oferuje wygodne klasy do manipulacji z danymi) oraz zrozumienie zasad programowania obiektowego będzie przydatna przy tworzeniu złożonych pluginów.

W jaki sposób różnią się pliki functions.php w pluginach i tematach?

Dodaj kod do temy. functions.php Pliki są sposobem na szybkie implementowanie określonych funkcji, ale te funkcje są mocno powiązane z aktualnym tematem witryny. Gdy zmienisz temat, te funkcje zostaną utracone. Natomiast pluginy to niezależne od tematu moduły funkcjonalne – działają niezależnie od tego, jaki temat jest włączony, i ich działanie jest gwarantowane, dopóki są aktywne. To sprawia, że funkcje są bardziej przenoszowe, a konserwacja witryny staje się łatwiejsza.

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

Używanie programowania obiektowego (OOP) oraz pakowania kodu w klasach to najlepszy sposób na uniknięcie konfliktów nazw funkcji. Jeśli używasz programowania proceduralnego, musisz ustalić unikalne prefiksy dla wszystkich funkcji, stałych i zmiennych globalnych. Ten prefiks powinien być wystarczająco charakterystyczny – na przykład może zawierać skrót twojego marki lub nazwy dodatku (pluginu). myplugin_art_rt_

Jak powinienem debugować dodatek, który jest w fazie rozwoju?

Najpierw upewnij się, że w WordPressie… wp-config.php Włączyć tryb debugowania w pliku: define(‘WP_DEBUG’, true);define(‘WP_DEBUG_LOG’, true);W ten sposób błędy i ostrzeżenia w PHP będą zapisywane. /wp-content/debug.log W pliku. Ponadto można użyć narzędzi deweloperskich w przeglądarzu do sprawdzenia problemów z frontendem, a także z tych narzędzi można skorzystać do rozwiązania problemów. error_log() Funkcja w kodzie wyświetla wartości zmiennych do pliku logów w celach debugowania.

Podczas rozwoju komercyjnych wtyczek (pluginów) należy uwzględnić następujące aspekty prawne:

Najważniejszym aspektem prawnym jest stosowanie warunków licencji WordPress. Jeśli planujesz opublikować swój plugin w oficjalnym katalogu WordPress, musi on być objęty licencją GPLv2 lub wyższej wersji. To oznacza, że kod pluginu musi być dostępny dla wszystkich (open source). Możesz zarabiać sprzedając usługi wsparcia, dodatkowe funkcje, dokumentację lub wersje pluginu z dodatkowymi opcjami hostingu. Ponadto, jeśli przetwarzasz dane użytkowników, musisz mieć na oku regulaminy o ochronie danych, takie jak GDPR, i stosować się do nich. Zaleca się dokładnie opisać w polityce prywatności pluginu, w jaki sposób są zbierane i używane dane użytkowników.