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

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

Przygotowanie i konfiguracja środowiska

Przed rozpoczęciem pisania kodu potrzebny jest odpowiedni środowisko rozwoju. To obejmuje lokalną instalację WordPress, edytor kodu oraz posiadanie podstawowych znań w tej dziedzinie.

Najpierw upewnij się, że masz lokalne środowisko serwera. Możesz szybko je uruchomić za pomocą narzędzi takich jak XAMPP, MAMP, Local by Flywheel lub Docker. Po instalacji i konfiguracji WordPressu masz dostęp do bezpiecznego środowiska testowego, w którym możesz przeprowadzać testy, nie ryzykując wpływu na witrynę internetową w publicznym obszarze.

Następnie potrzebny jest przyjazny do obsługi edytor kodu. Visual Studio Code, PhpStorm lub Sublime Text to doskonałe wybory – wszystkie oferują dobrą obsługę języków PHP, HTML, JavaScript i CSS, a także funkcje takie jak wyświetlanie kolorowego kodu, automatyczne dopisywanie zdań oraz możliwości debugowania.

Polecamy lekturę. Od zera do jednego: Przewodnik po rozwoju pluginów dla WordPressa i najlepszych praktyk

Na koniec należy zaznaczyć, że zrozumienie podstawowej struktury pluginów WordPress jest niezbytne. Plugin to w istocie jeden lub kilka plików w formacie PHP, znajdujących się w katalogu zainstalowanego WordPress. /wp-content/plugins/ W folderze znajdują się wszystkie pliki dodatkowe (plugi). Każdy plugin musi mieć plik główny, który zawiera specjalne informacje o tym pluginie, potrzebne do jego identyfikacji w systemie 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.

Tworzenie i deklaracja głównego pliku wtyczki

Pierwszym krokiem w tworzeniu pluginu jest stworzenie pliku głównego oraz dodanie odpowiednich komentarzy na początku pliku. Ten plik zwykle nosi nazwę odnoszącą się do funkcji, którą realizuje plugin. my-first-plugin.phpProszę to zrobić w swoim lokalnym środowisku. /wp-content/plugins/ Utworz kopię foldera w katalogu i nazwij ją… my-first-pluginNastępnie w tym folderze utwórz plik główny (main file).

Zawartość pliku header.php stanowi zbior metadanych o pluginie, które informują WordPress o jego nazwie, opisie, wersji, autorze itd. Oto przykład najprostszego pliku header.php:

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

Po zapisaniu tego pliku loguj się do panelu administracyjnego WordPress, wejdź na stronę “Dodatki” (Plugins) i powinien pojawić się nowy dodatek o nazwie “Moje pierwsze funkcjonalne dodatko” w liście dostępnych pluginów. Możesz go aktywować, chociaż na razie nie ma on żadnych rzeczywistych funkcji.

Podstawowa architektura: haczyki dla działań i filtrów

Podstawa potężnych możliwości rozszerzania WordPressa stanowi system hooków, który umożliwia programistom wstawianie swojego kodu w określone momenty czasowe lub przed/wiązane z wykorzystaniem danych. Hooki dzielą się na dwa typy: akcje (Actions) i filtry (Filters).

Polecamy lekturę. Przewodnik po rozwoju tematów dla WordPress: jak stworzyć swoją własną szablonę witryny od zera

Aktywnie działające „haki” (ang. action hooks) umożliwiają wykonywanie własnych funkcji w momencie wystąpienia określonych wydarzeń w WordPress. Na przykład, gdy publikuje się artykuł…publish_postPodczas ładowania menu w panelu administracyjnym…admin_menu) albo podczas ładowania skriptów w nagłówku strony internetowej (wp_enqueue_scripts(Nie używaj więcej niż dwóch kolorów). Użyj add_action() Funkcja służy do przyłączenia Twojej funkcji do „hooka akcji” (action hook).

Użyj hooków akcji do dodawania menu w tle aplikacji.

Przyjmiemy, że chcemy dodać stronę konfiguracji dla naszego pluginu w panelu administracyjnym WordPress. Będziemy używać… admin_menu Ten „hook” do działań. Dodaj ten kod do swojego głównego pliku, po informacjach o nagłówku pluginu:

// 在管理后台添加菜单
function mfp_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 slug
        'mfp_settings_page',    // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(可选)
        80                     // 菜单位置(可选)
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

// 设置页面的回调函数
function mfp_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <p>Witaj na stronie ustawień mojego pierwszego dodatku!</p>
    </div>
    &lt;?php
}

Filtry z hookami umożliwiają modyfikację danych. Przyjmują dane wejściowe, które po przetworzeniu przez twoją funkcję muszą zostać powróczone w postaci zmienionych wartości. Na przykład, można zmienić nagłówek artykułu.the_titleModyfikacja treści artykułuthe_content) lub zmienić długość wydarzenia (excerpt_length(Nie używaj więcej niż dwóch kolorów). Użyj add_filter() Funkcja służy do montowania Twojej funkcji na „hook” filtra.

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%

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

Zróbmy prostą funkcję: automatycznie dodawajmy oświadczenie o prawach autorskich na końcu każdego tekstu artykułu.

// 在文章内容后添加自定义文本
function mfp_add_copyright_to_content( $content ) {
    // 仅对网站前端的主循环中的文章生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Uwaga dotycząca praw autorskich: Treść tego tekstu należy do naszej strony internetowej. Przed jego reprodukcją prosimy o wskazanie źródła.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_to_content' );

Realizacja konkretnych funkcji: skróty i uproszczone formy kodu

Shortcode to potężna funkcja dostępna w WordPress, która umożliwia użytkownikom wstawianie prostego znaku (tzw. tagu) w artykułach lub na stronach, aby uzyskać określony efekt. [my_shortcode]Można używać tego narzędzia do generowania złożonego dynamicznego zawartości lub wykonywania określonych funkcji. To daje twórcom treści ogromną swobodę działania.

Stworz i zarejestruj prosty kod kreskowy.

Aby stworzyć skrótowkę, potrzebne są dwa kroki: pierwszy to definicja funkcji obsługującej tę skrótowkę, a drugi to jej użycie. add_shortcode() Funkcja umożliwia jej zarejestrowanie w WordPress. Utworzymy teraz skrót, który wyświetla aktualną datę oraz powitanie.

Polecamy lekturę. Od poznania podstaw do osiągnięcia biegłości: Pełny przewodnik i praktyczne kursy rozwoju pluginów dla WordPress

// 定义简码的处理函数
function mfp_show_greeting_shortcode( $atts ) {
    // 使用 shortcode_atts 定义默认参数,并合并用户传入的参数
    $atts = shortcode_atts(
        array(
            'name' =&gt; '访客',
        ),
        $atts,
        'greeting'
    );

// 获取当前时间
    $current_time = current_time( 'mysql' );
    $hour = date( 'H', strtotime( $current_time ) );

// 根据时间生成问候语
    if ( $hour &lt; 12 ) {
        $greeting = &#039;上午好&#039;;
    } elseif ( $hour &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

// 构建输出
    $output = &#039;<div class="mfp-greeting">'$output .= sprintf( '<p>%s, %s!</p>'`esc_html($atts['name'])`, esc_html($greeting));  
$output .= sprintf('<p>Obecna godzina to: %s</p>'`, esc_html($current_time) );
    $output .= '</div>';

return $output;
}
// 注册简码,第一个参数是用户使用的标签名
add_shortcode( 'greeting', 'mfp_show_greeting_shortcode' );

Teraz użytkownicy mogą korzystać z tego w edytorze artykułów. [greeting name="张三"]Na ekranie pojawi się tekst: “Zhang San, witaj! Obecna godzina to: 2026-…”. Jeśli nie podano żadnych parametrów, użyje się automatycznie nazwy “Wizytator”.

Dziennik rozwoju: Tworzenie tabel w bazie danych i stron z opcjami

Złożonejniejsze wtyczki mogą wymagać przechowywania własnych danych. WordPress oferuje dwa głównych sposoby na to: można użyć API opcji WordPress do przechowywania prostych par klucza-wartości lub stworzyć własne tabele w bazie danych do przechowywania strukturalizowanych danych.

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.

Używanie API opcji do zapisywania ustawień

API do opcji jest doskonale przydatne do przechowywania informacji konfiguracyjnych pluginów. Ulepszymy wcześniej stworzoną stronę ustawień w tle, aby umożliwiła zapisywanie i odczytywanie prostych ustawień.

Najpierw musimy stworzyć formularz. mfp_settings_page() W funkcji dodaj prosty formularz do obsługi ustawień:

function mfp_settings_page() {
    // 检查用户是否提交了表单
    if ( isset( $_POST['mfp_submit_settings'] ) ) {
        // 安全检查:验证 nonce
        if ( ! isset( $_POST['mfp_settings_nonce'] ) || ! wp_verify_nonce( $_POST['mfp_settings_nonce'], 'mfp_save_settings' ) ) {
            wp_die( '安全验证失败!' );
        }
        // 权限检查
        if ( ! current_user_can( 'manage_options' ) ) {
            wp_die( '权限不足!' );
        }
        // 清理并保存选项
        $custom_message = sanitize_textarea_field( $_POST['custom_message'] );
        update_option( 'mfp_custom_message', $custom_message );
        echo '<div class="notice notice-success is-dismissible"><p>Ustawienia zostały zapisane!</p></div>';
    }

// 从数据库读取现有值
    $saved_message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form method="post" action="" data-trp-original-action="">
            <?php wp_nonce_field( 'mfp_save_settings', 'mfp_settings_nonce' ); ?>
            <table class="form-table">
                <tr>
                    <th scope="row"><label for="custom_message">Udostępniony tekst:</label></th>
                    <td>
                        <textarea name="custom_message" id="custom_message" rows="5" cols="50" class="large-text"><?php echo esc_textarea( $saved_message ); ?></textarea>
                        <p class="description">Ten tekst zostanie wyświetlony przy użyciu skrótu [show_message].</p>
                    </td>
                </tr>
            </table>
            <?php submit_button( '保存更改', 'primary', 'mfp_submit_settings' ); ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

Następnie tworzymy nowy skrót, który służy do wyświetlania tej zapisanej wiadomości:

function mfp_show_message_shortcode() {
    $message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
    return '<div class="mfp-custom-message">'. wp_kses_post( wpautop( $message ) ) . '</div>'add_shortcode( 'show_message', 'mfp_show_message_shortcode' );

Teraz administratorzy mogą dostosować wiadomości na stronie ustawień pluginu, a autorzy muszą je jedynie używać w swoich artykułach. [show_message] Aby wyświadczyć tę wiadomość, wystarczy skorzystać z skrótu.

Gdy włączony jest dodatek, jest tworzona tabela dostosowana.

Dla pluginów, które wymagają przechowywania złożonych danych relacyjnych, takich jak zamówienia czy logi, może być konieczne stworzenie własnych tabel w bazie danych. To zwykle odbywa się w momencie aktywacji pluginu. WordPress oferuje odpowiednie narzędzia do realizacji tego. register_activation_hook Definiuj funkcję, która zostanie wykonana w momencie aktywacji.

Uwaga: Podany poniżej kod jest wyłącznie przykładem; w rzeczywistym rozwoju programu konieczne jest bardziej dokładne obsługiwanie błędów oraz użycie abstrakcyjnego poziomu interfejsu do baz danych (np.…) $wpdbUżywanie tego narzędzia.

// 插件激活时运行的函数
function mfp_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'mfp_plugin_logs'; // 确保表名唯一
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        log_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        user_id bigint(20) DEFAULT 0,
        action varchar(255) NOT NULL,
        details text,
        PRIMARY KEY  (id)
    ) $charset_collate;";

// 引入 WordPress 升级 API,用于执行 dbDelta 函数
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
// 注册激活钩子
register_activation_hook( __FILE__, 'mfp_create_custom_table' );

Podsumowanie.

Przez ten przewodnik prześcignąłeś kluczowe etapy rozwoju pluginów dla WordPress. Zaczęłeś od przygotowania środowiska i napisania kodu początkowego pluginu, a potem nauczyłeś się, jak rozszerzać funkcje WordPress za pomocą akcji (actions) i hooków filtrów (filters), jak umożliwić użytkownikom elastyczne wstawianie treści za pomocą skrótów, jak przechowywać ustawienia za pomocą API opcji (options API) oraz jak tworzyć własne tabele w bazie danych. To są podstawy tworzenia funkcjonalnych pluginów. Pamiętaj, że dobrza struktura kodu, bezpieczeństwo (np. weryfikacja nonce i sprawdzanie upoważnień) oraz przygotowanie do internationalizacji to niezbędne elementy profesjonalnego rozwoju pluginów. Następnym krokiem może być eksploracja API REST WordPress, tworzenie własnych typów artykułów, metadanych (Meta Boxes), a także wdrożenie standardów dla skryptów i stylów frontendu, aby stworzyć jeszcze bardziej złożone i wydajne pluginy.

FAQ – najczęściej zadawane pytania.

Czy wtyczka może mieć tylko jeden główny plik?

Nie jest tak. Dodatek może zawierać kilka plików PHP. Jednak musi istnieć plik główny, zawierający informacje o nagłówku dodatku – to jest punkt wejścia, przez który WordPress rozpoznaje dodatek. Złożone dodatki często organizują kod realizujący różne funkcje w kilku plikach, które są importowane za pomocą pliku głównego, aby ułatwić zarządzanie kodem i zrealizować modułową strukturę.

Jak bezpiecznie obsługiwać dane wysłane przez użytkowników w formularzach na stronie frontowej?

Podczas obsługi danych wysłanych przez użytkowników konieczne jest dokonanie surowej weryfikacji, ich przygotowania oraz użycia odpowiednich metod escape. W przypadku wejściowych danych należy zastosować odpowiednie zasady bezpieczeństwa, aby zapobiec potencjalnym problemom. sanitize_text_field()sanitize_email()sanitize_textarea_field() Niektóre funkcje należy usunąć lub przygotować do dalszego wykorzystania. Jeśli dane są wyświetlane na stronie HTML, należy je odpowiednio przetworzyć, aby pasowały do wymagań tego formatu. esc_html()esc_attr()wp_kses_post() Konieczne jest wykonywanie operacji escapeowania. Ponadto należy używać mechanizmu nonce w WordPress, aby zapobiec falsyfikacji żądań między witrynami (cross-site requests). current_user_can() Sprawdź uprawnienia użytkownika.

Jak moja wtyczka może uniknąć konfliktów nazw funkcji z innymi wtyczkami?

Najlepszą praktyką jest używanie przestrzeni nazw (PHP 5.3+) lub umieszczanie wszystkich funkcji, klas i stałych pod jednym unikalnym prefiksem. Na przykład wszystkie funkcje w tej instrukcji startowej zaczynają się od “mfp_” (skrótu dla „My First Plugin”). Jeśli korzystasz z programowania obiektowego, pakowanie koda w klasy jest również skutecznym sposobem na uniknięcie konfliktów nazw.

Po ukończeniu rozwoju, jak rozdawać plagiiny lub umieszczać je w oficjalnym katalogu?

Aby złożyć plugin do oficjalnego katalogu pluginów na stronie WordPress.org, musisz stworzyć pakiet plugina, który spełnia określone wymogi. To zwykle oznacza stosowanie standardowej struktury plików. README.txtWymagane są dokładne informacje o tłumaczeniu, deklaracje dotyczące kompatybilności, a kod musi spełniać standardy kodowania WordPress. Konieczne jest uzyskanie konta dewelopera na stronie WordPress.org, a potem użycie narzędzia SVN do wysyłania kodu do wskazanego repozytorium.