Kompletny przewodnik po tworzeniu wtyczek do WordPressa: od podstaw do tworzenia niestandardowych funkcji w praktyce.

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

Krótki przewodnik po tworzeniu wtyczek do WordPressa

WordPress plugin to zbiór skryptów w języku PHP, które służą do rozszerzania i ulepszania funkcji standardowego oprogramowania WordPress. Dzięki nim programiści mogą dodawać nowe funkcje, narzędzia, panele administracyjne lub modyfikować zachowanie istniejących elementów bez konieczności edycji kodu źródłowego WordPress. Plugin może być bardzo prosty – składać się z jednego tylko pliku – ale może też być bardzo złożony, zawierający kilka katalogów i różnych typów plików.

Rozumienie istoty pluginu polega na jego pliku wejściowym. Każdy plugin musi zawierać co najmniej jeden główny plik w formacie PHP, a w jego nagłówku muszą być umieszczone standardowe metadane pluginu. Te dane są readowane przez menadżer pluginów w WordPress i wyświetlone w liście pluginów w tle witryny.

Stworzenie swojego pierwszego pluginu

Stwórz podstawową strukturę plików.

Najpierw musisz stworzyć plik wejściowy (ang. entry file) dla pluginu. To znajduje się w katalogu z instalacją WordPress.wp-content/plugins/W folderze utwórz nowy folder, na przykład nazwany „nowy_folder”.my-first-pluginW tym folderze utwórz główny plik PHP o nazwie identycznej z nazwą foldera, na przykład:my-first-plugin.php

Polecamy lekturę. Zaczynamy od podstaw: tworzenie swojej pierwszej wtyczki WordPress.

Napisz informacje o nagłówku wtyczki.

W tym głównym pliku musisz dodać komentarz z informacjami o nagłówku pliku rozszerzenia, zgodny ze standardami WordPress. To kluczowe, aby rozszerzenie zostało rozpoznane i aktywowane przez 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.
<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于演示的简单插件,它将在文章内容顶部添加一行文字。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Ten komentarz zawiera podstawowe informacje o pluginie. Po zapisaniu tego pliku będzie on dostępny na stronie “Pluginy” w panelu administracyjnym WordPress.

Realizacja prostej funkcji.

Następnie dodamy do tego pluginu najprostszą funkcję: na początku każdego tekstu artykułu będzie wyświetlony tekst ustawiony przez użytkownika. Możemy to zrealizować za pomocą…the_contentTen filtr jest implementowany za pomocą „hooków filtrowania” (filter hooks).

function myplugin_add_text_to_content( $content ) {
    $custom_text = '<p>Ten tekst został dodany za pomocą mojego pierwszego pluginu, który umożliwia wyświetlanie powitań!</p>';
    return $custom_text . $content;
}
add_filter( 'the_content', 'myplugin_add_text_to_content' );

Dodaj ten kod do swojego głównego pliku z pluginem.my-first-plugin.phpW tym dokumencie należy zapisać i aktywować dodatek. Teraz, gdy przeglądasz jakąś postę lub stronę na stronie internetowej, wskazany tekst będzie wyświetlany na początku treści. To jest najprostszym sposobem implementacji funkcji dodatku.

Podstawowe koncepty rozwoju pluginów oraz API (Application Programming Interface)

Zrozumienie mechanizmu „hooków” (ang. hooks)

Hakowanie (ang. hooking) stanowi element kluczowy w rozwoju pluginów dla WordPressa – umożliwia bowiem łączenie swojego kodu z procesem wykonywania kodu wewnętrznego WordPressa lub innych pluginów. Hakowania dzielą się głównie na dwa typy: akcje (Action) i filtry (Filter).

Polecamy lekturę. Jak nauczyć się tworzyć wtyczki do WordPressa od podstaw: kompletny przewodnik i praktyczne porady.

Zadanie to służy do wykonywania Twojego własnego kodu w określonym momencie czasu. Na przykład…wp_footerDzięki tej funkcji możesz wyświetlić HTML lub skrypty na dole strony. Możesz ją wykorzystać do dodawania dodatkowych elementów lub realizacji różnych zadań.add_action()Funkcja służy do montowania danej akcji (dzieła).

Filtry służą do modyfikacji danych przed ich przesłaniem do bazy danych lub do przeglądarki. Na przykład, w powyżej przykładzie zostały użyte filtry do odpowiedniej obróbki informacji.the_contentFiltry umożliwiają modyfikację treści artykułów. Musisz je użyć.add_filter()Funkcja służy do dodawania filtrów, a twoja funkcja wywołana w ramach tej procedury musi zwrócić zmienioną wartość.

Wykorzystywanie klasy baz danych centralnej

WordPress oferuje potężną klasę abstrakcji bazy danych.wpdbMoże być używany do bezpiecznego interakcjonowania z bazą danych. Powinnoś korzystać bezpośrednio z tego globalnego obiektu, zamiast bezpośrednio wywoływać funkcje MySQL w PHP.

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%

Na przykład, jeśli chcesz sprawdzić informacje w bazie danych, możesz to zrobić w następujący sposób:

global $wpdb;
$results = $wpdb->get_results( "SELECT id, name FROM {$wpdb->prefix}my_custom_table" );

Uważaj na to, jak to używasz.$wpdb->prefixAby upewnić się, że prefiks tabeli jest poprawny, koniecznie używaj go przy operacjach wpisywania, aktualizowania lub usuwania danych.wpdbProponowane rozwiązanie…insert()update()Metody te automatycznie przetwarzają dane, aby zapobiec atakom typu SQL injection.

Tworzenie strony z ustawieniami administracyjnymi

Stworzenie strony konfiguracji dla wtyczki jest podstawowym wymogiem profesjonalnych wtyczek. WordPress oferuje różne funkcje API do dodawania elementów menu i stron na różnych poziomach, a najczęściej używana z nich to…add_menu_page()add_options_page()

Polecamy lekturę. Praktyczny przewodnik po WooCommerce: jak stworzyć profesjonalną stronę e-commerce od podstaw.

Poniżej znajduje się przykład dodania górnego menu oraz strony z prostymi ustawieniami:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',        // 页面标题
        '我的插件',            // 菜单标题
        'manage_options',      // 所需权限
        'myplugin-settings',   // 菜单Slug
        'myplugin_settings_page', // 回调函数,用于输出页面HTML
        'dashicons-admin-generic', // 图标
        6                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

function myplugin_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
                settings_fields( 'myplugin_settings_group' );
                do_settings_sections( 'myplugin-settings' );
                submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

Ten przykład tworzy najwyższy menu o nazwie “Moje dodatki” („My Plugins”). Po kliknięciu na niego otworzy się witryna zawierająca informacje o tych dodatkach.myplugin_settings_pageStrona renderowana przez funkcję. Zwykle używa się w połączeniu z API ustaw WordPress (Settings API).register_setting, add_settings_section, add_settings_fieldDzięki temu można bezpiecznie przetwarzać i przechowywać ustawienia.

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.

Praktyczne przykład projektu: Rozwoj wtyczki do zarządzania notatkami

W tym segmencie połączymy wyżej opisane informacje, aby stworzyć prostą funkcję “notatki”, którą można używać na stronie edycji artykułów. Ten dodatek umożliwia autorom artykułów dodawanie prywatnych, interwnejnych notatek.

Utwórz niestandardową tabelę w bazie danych.

Najpierw, po aktywacji wtyczki, musimy stworzyć nowy tabel w bazie danych do przechowywania notatek. To można zrealizować poprzez zarejestrowanie hooka aktywacji.register_activation_hookAby to zrealizować…

function my_note_plugin_activate() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_notes';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        post_id bigint(20) NOT NULL,
        note_content text NOT NULL,
        created_by bigint(20) NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'my_note_plugin_activate' );

W tym miejscu używamy…dbDelta()Funkcje służą do tworzenia lub aktualizowania struktury tabeli. To bezpieczny i dobrze zgodny z wymaganiami standardów sposób.

Dodaj metawiązek na ekranie edycji artykułu.

Następnie musimy dodać na stronie edycji artykułu metawiązek, który będzie służyć do wyświetlania i zapisywania notatek. Do tego potrzebny będzie…add_meta_boxFunkcję, a potem ją montuj (zainstaluj) w odpowiednim miejscu.add_meta_boxesPod względem działań.

function my_note_add_meta_box() {
    add_meta_box(
        'my_note_meta_box',         // 元框的唯一ID
        '文章内部便签',             // 显示的标题
        'my_note_meta_box_callback', // 渲染元框内容的回调函数
        'post',                     // 要显示的帖子类型
        'side',                     // 位置
        'default'                   // 优先级
    );
}
add_action( 'add_meta_boxes', 'my_note_add_meta_box' );

function my_note_meta_box_callback( $post ) {
    // 从数据库获取当前文章的已有便签
    global $wpdb;
    $table_name = $wpdb-&gt;prefix . 'post_notes';
    $notes = $wpdb-&gt;get_results( $wpdb-&gt;prepare( "SELECT * FROM $table_name WHERE post_id = %d ORDER BY created_at DESC", $post-&gt;ID ) );

wp_nonce_field( 'my_note_save_action', 'my_note_nonce_field' );
    echo '<textarea name="my_new_note" rows="5" style="width:100%;" placeholder="Wpisz swoje wnętrzne notatki…."></textarea>'echo '<p class="description">Ta notacja jest widzialna tylko dla redaktorów i administratorów witryny.</p>';

if ( $notes ) {
        echo '<hr><h4>Notatki z historii:</h4>';
        foreach ( $notes as $note ) {
            $user = get_user_by( 'id', $note-&gt;created_by );
            $username = $user ? $user-&gt;display_name : '未知用户';
            echo '<p><strong>' . esc_html( $username ) . ' (' . $note-&gt;created_at . '):</strong><br>';
            echo nl2br( esc_html( $note-&gt;note_content ) ) . '</p>';
        }
    }
}

Zapisywanie i czyszczenie danych

Gdy artykuł jest zapisany lub aktualizowany, musimy umieścić nowe notatki w bazie danych. To można zrealizować poprzez…save_postAkcje muszą zostać zrealizowane w odpowiednim sposób. Ponadto, w przypadku usunięcia wtyczki (możliwe), konieczne jest dostarczenie mechanizmu do jej odinstalowania.register_uninstall_hookPojedźmy i usunąme stworzone tabele danych.

function my_note_save_post_data( $post_id ) {
    // 检查非ce、权限、自动保存等
    if ( ! isset( $_POST['my_note_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_note_nonce_field'], 'my_note_save_action' ) ) {
        return;
    }
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }

if ( ! empty( $_POST['my_new_note'] ) ) {
        global $wpdb;
        $table_name = $wpdb->prefix . 'post_notes';

$wpdb->insert(
            $table_name,
            array(
                'post_id' => $post_id,
                'note_content' => sanitize_textarea_field( $_POST['my_new_note'] ),
                'created_by' => get_current_user_id(),
            ),
            array( '%d', '%s', '%d' )
        );
    }
}
add_action( 'save_post', 'my_note_save_post_data' );

// 可选:卸载插件时删除数据表
function my_note_plugin_uninstall() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_notes';
    $wpdb->query( "DROP TABLE IF EXISTS $table_name" );
}
register_uninstall_hook( __FILE__, 'my_note_plugin_uninstall' );

Best Practices and Preparation for Release

Dodróżniaj standardy kodowania WordPress.

Aby zapewnić czytelność, łatwość utrzymania kodu oraz jego kompatybilność z innymi pluginami, konieczne jest ścisłe stosowanie oficjalnych standardów kodowania PHP dostępnych w WordPress. Standardy te obejmują m.in.: stosowanie poprawnego formatowania tekstu (używanie tabulacji zamiast przestrzeni), nazawanie funkcji i zmiennych w formie małych liter z dodatkowymi znakami podkresu (składnia typu „snake_case”), nazawanie klas w formie wielkich liter z dodatkowymi znakami podkresu (składnia typu „UpperCamelCase”) oraz używanie funkcji do obsługi tekstów językowych w tych miejscach, gdzie to jest konieczne.

Implementacja internacjonalizacji

Wynikający plugin, który ma szansę zostać szeroko używany, musi obsługiwać funkcję internationalizacji. To oznacza, że wszystkie teksty skierowane do użytkowników muszą być umieszczone w zasobach przeznaczonych do tłumaczeń.

WordPress oferuje…__()_e()_n()I tak dalej – lista funkcji. Najpierw musisz ustawić odpowiednie informacje w nagłówku pliku rozszerzenia (plugin).Text Domain(Na przykład: „my-first-plugin”), a potem każdy raz, gdy wyświetla się lub używa się ten tekst, należy go odpowiednio „opakować” (zawrzeć w jakieś struktury lub obiekty programowe).

Na przykład:

Echo '<p>' . esc_html__( '这是一个演示文本。', 'my-first-plugin' ) . '</p>';

Następnie możesz użyć narzędzia takiego jak Poedit, aby wybrać cały tekst i przygotować go do dalszego wykorzystania..potPlik, dostępny do tłumaczenia na różne języki..mo.poDokumenty.

Optymalizacja bezpieczeństwa i wydajności

Bezpieczeństwo to kluczowy aspekt przy rozwijaniu dodatków (pluginów). Zawsze sprawdź i oczyszczaj dane wprowadzone przez użytkowników (sanitizuj je), a wydawane dane muszą być odpowiednio przetworzone (escapeuj je). Podczas wykonywania zapytań SQL koniecznie używaj odpowiednich procedur bezpieczeństwa.prepare()Zastosuj zasady zapobiegające iniekcjom („anti-injection” measures). Przed wykonaniem jakiegoś działania sprawdź uprawnienia użytkownika.current_user_can()W przypadku niektórych przypadków, gdy nie używa się mechanizmu „nonce” w WordPress, należy zastosować inny sposób generowania unikalnych identyfikatorów.wp_nonce_field(), wp_verify_nonce())。

Pod względem wydajności należy optymalizować zapyty do bazy danych i unikać ich wykonywania w cyklach. Korzystaj z API „Transients” w WordPressu w celu efektywnego ustawiania cache. Gdy nie jest konieczne używanie hooków, usuń je w odpowiednim momencie.remove_action(), remove_filter()Na koniec upewnij się, że w katalogu z pluginami znajdują się tylko niezbędne pliki, a przed publikacją skompresuj i oczyszcz kod.

Gotowe do publikacji w repozytorium WordPress.

Jeśli zamierzasz opublikować dodatek w oficjalnym katalogu dodatków do WordPress, konieczne jest wykonać serię przygotowanych działań. Upewnij się, że dodatek ma jasno zdefiniowane funkcje i interfejs użytkownika.readme.txtPlik jest w formacie zgodnym z wymaganiami WordPress. Powinien zawierać opis pluginu, instrukcje do instalacji, często zadawane pytania (FAQ), historię aktualizacji oraz inne niezbędne informacje. Ponadto upewnij się, że informacje w nagłówku pliku zawierającego sam plugin są kompletnie i dokładnie. Dokładnie sprawdź, jak twój plugin funkcjonuje w różnych środowiskach i na różnych wersjach WordPress.

Podsumowanie.

Rozwoj pluginów dla WordPress jest procesem twórczym, który umożliwia przekształcenie pomysłów w potężne funkcje. Poprzez zrozumienie podstawowej struktury pluginów, opanowanie kluczowych mechanizmów (takich jak akcje – Actions i filtry – Filters) oraz biegłe korzystanie z API ustawień (Settings API) i operacji na bazie danych, możesz tworzyć różne pluginy – od prostych narzędzi po złożone rozwiązania. W całym procesie rozwoju bezwzględnie trzeba mieć na oku bezpieczeństwo, wydajność, standardy kodu oraz możliwości internationalizacji. Zaczynając od stworzenia pierwszego pluginu typu “Hello World”, po stopniowe zdobywanie doświadczenia, w końcu będziesz mogł z poważaniem tworzyć profesjonalne, gotowe do publikacji pluginy dla WordPress.

FAQ – najczęściej zadawane pytania.

Jakie techniki należy opanować, aby rozwijać dodatki (plugi)?

Konieczne jest, abyś miał solidne podstawy w PHP, a także znał elementy HTML, CSS i JavaScript. Wiedza o bazie danych MySQL jest również istotna. Najważniejsze jest, abyś zrozumiał strukturę WordPressa, szczególnie mechanizm hooków oraz hierarchię szablonów. Wiedza z programowania obiektowego (OOP) będzie przydatna przy tworzeniu złożonych wtyczek.

W jaki sposób różnią się funkcje wtyczek (plug-inów) i tematów (themes)?

Dodatki (plug-ins) służą do dodawania lub modyfikowania funkcjonalności witryny internetowej. Teoretycznie powinny być oddzielone od jej wyglądu i mieć wysoką portabilitę, aby mogły dalej funkcjonować po zmianie tematu (tema to element, który kontroluje wygląd i układ witryny). Choć współczesne tematy często zawierają dużo kodu implementującego różne funkcje, to takie postępowanie jest uznawane za złą praktykę. Zgodnie z najlepszymi standardami: jeśli funkcja jest ściśle powiązana z wyglądem witryny, można ją umieścić w temacie; jeśli natomiast jest to funkcja ogólnego zastosowania lub niezależna, należy ją stworzyć jako dodatek.

Jak poradzić sobie z aktualizacjami i kompatybilnością pluginów?

Aby obsługiwać aktualizacje, należy zmienić informacje umieszczone w komentarzach na początku pliku z pluginem.VersionPola. W przypadku istotnych aktualizacji można zastanowić się nad wykorzystaniem mechanizmu powiadomień o aktualizacjach i programów do ich wdrożenia w WordPress. Kluczowym elementem gwarantującym kompatybilność jest ścisłe stosowanie API serca WordPressa podczas rozwoju, unikanie używania prywatnych lub wycofanych funkcji, a także…readme.txtW dokumencie jest jasno zaznaczona najniższa wersja WordPress, którą plugin obsługuje. Przed wydaniem nowej wersji konieczne jest dokładne testowanie pluginu na kilku różnych wersjach WordPress.

Jak pliki CSS i JavaScript powinny być załadowane przez plugin?

Nigdy nie należy wprostu włączać CSS lub JS bezpośrednio do plików PHP dodatków (pluginów). Aby zapewnić kompatybilność i dobrą wydajność, należy używać funkcji `wp_enqueue` w WordPress, aby skrypty i arkusze stylów zostały załadowane poprawnie. To należy robić w tle (w obszarze administracji witryny).admin_enqueue_scriptsHak, używany na frontendzie.wp_enqueue_scriptsHak. Użyj go.wp_enqueue_style()wp_enqueue_script()Funkcje, z uwzględnieniem zależności i numerów wersji.

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

Dodawanie własnych typów artykułów (Custom Post Types, CPT) w WordPress:register_post_type()Funkcja do dodawania własnej klasifikacjiregister_taxonomy()Funkcje. Zgodnie z najlepszymi praktykami operacje rejestracji należy umieszczać w odpowiednich miejscach w kodzie.initDziałanie jest wykonywane w związku z aktywnością hooków („action hooks”). Konieczne jest uważne konfigurowanie arrayu parametrów rejestracji, w którym należy uwzględnić takie informacje jak tagi, poziom dostępności (publiczność), obsługiwanie funkcji, a także nałożenie ograniczeń dotyczących dostępu do strony archiwów itd. To decyduje o zachowaniu tego elementu w tle aplikacji („w backendzie”) oraz