Podstawa struktury i tworzenia pluginów dla WordPressa

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

Podstawa struktury i tworzenia pluginów dla WordPressa

Rozpoczęcie pracy nad pluginem dla WordPress polega na stworzeniu prostego pliku w języku PHP. Ten plik musi zawierać określone komentarze na początku, aby WordPress mógł go rozpoznać i zarządzać nim jako pluginem. Najprostszym pluginem może być plik składający się z jednego tylko filetu. my-first-plugin.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
 */

W komentarzach na początku pliku “Plugin Name” jest obowiązkowy, natomiast pozostałe informacje są opcjonalne. Po aktywacji pluginu jego funkcje są realizowane poprzez wykonywanie odpowiednich funkcji PHP w odpowiednim momencie. Najpopularniejszym sposobem na to jest używanie “hooków akcji” (action hooks). Na przykład, jeśli chcesz dodać tekst na dole strony internetowej, możesz to zrobić w taki sposób… wp_footer Hak.

// 在页脚输出自定义内容
function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Dziękujemy za korzystanie z mojego pluginu!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

add_action To funkcja w języku PHP, znajdująca się w core’u WordPressu, służąca do przypisania własnych funkcji do określonych „hooków” (punktów we wzorcach zachowania aplikacji). Zaleca się umieszczać katalogy z dodatkowymi pluginami w specjalnie przeznaczonych dla nich miejscach w strukturze plików WordPressa. /wp-content/plugins/your-plugin-name/ Ponadto, oprócz pliku głównego, można zawierać również pliki z kodem CSS, JavaScript, zdjęciami oraz innymi zasobami.

Polecamy lekturę. Pełny przewodnik po tematach WordPress: od wyboru i dostosowania po ich rozwój

Jak dodać menu zarządzania do pluginu?

Aby plugin miał stronę ustawień w panelu administracyjnym WordPressa, należy dodać do niego menu zarządzania. To zwykle jest realizowane poprzez… admin_menu Aby to zrealizować, użyjemy „hooków akcji” (action hooks).

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.

core functions add_menu_page Znaczek służy do dodania elementu menu najwyższego poziomu w bocznym panelu na stronie backend, wraz z jego odpowiednią stroną ustawień.

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

// 设置页面的HTML内容
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
            settings_fields( 'myplugin_options' ); // 输出安全字段
            do_settings_sections( 'myplugin-settings' ); // 输出设置区域
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="pl"/></form>
    </div>
    &lt;?php
}

Po stworzeniu menu następny krok to użycie API do konfiguracji w WordPress, aby określić konkretne, dostępne do zmian opcje.

Użyj API do konfiguracji, aby zapisać ustawienia dodatku.

Ręczne obsługiwanie procesów wysyłania formularzy oraz sprawdzania ich bezpieczeństwa jest uciążliwe i podatne na błędy. API do konfiguracji w WordPressu oferuje standardyzowaną metodę do rejestracji, wyświetlania i zapisywania ustawień. W tym procesie biorą udział trzy funkcje:register_setting, add_settings_sectionadd_settings_field

Poniższy przykład pokazuje, jak zarejestrować grupę opcji oraz dodać pole tekstowe.

Polecamy lekturę. Przewodnik po optymalizacji wydajności witryny WordPress: dogłębna analiza i praktyczne strategie.

function myplugin_settings_init() {
    // 注册一个新的设置项到数据库 `wp_options` 表中
    register_setting( 'myplugin_options', 'myplugin_settings' );

    // 在设置页面添加一个新的区域
    add_settings_section(
        'myplugin_section_basic', // 区域ID
        '基础设置',                // 区域标题
        'myplugin_section_callback', // 区域说明的回调函数
        'myplugin-settings'       // 对应的页面slug
    );

    // 在区域中添加一个字段
    add_settings_field(
        'myplugin_field_text',    // 字段ID
        '示例文本',                // 字段标题
        'myplugin_field_text_cb', // 字段HTML输出的回调函数
        'myplugin-settings',      // 页面slug
        'myplugin_section_basic'  // 区域ID
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 区域说明的回调函数
function myplugin_section_callback() {
    echo '<p>Oto obszar z podstawowymi ustawieniami dla pluginów.</p>';
}

// 文本字段的回调函数
function myplugin_field_text_cb() {
    // 从数据库中获取之前保存的设置值
    $options = get_option( 'myplugin_settings' );
    $value = $options['myplugin_field_text'] ?? ''; // 使用空合并运算符提供默认值
    // 输出HTML输入框
    echo '<input type="text" name="myplugin_settings[myplugin_field_text]" value="' . esc_attr( $value ) . '" class="regular-text">'echo '<p class="description">Proszę wprowadzić kilka przykładów tekstu.</p>';
}

Ustawienia zapisane w tym sposób można użyć w dowolnym miejscu kodu wtyczki. get_option('myplugin_settings') Dostęp i używanie w bezpieczny sposób.

Bezpieczeństwo w rozwoju dodatków (pluginów) oraz najlepsze praktyki

Bezpieczeństwo to kluczowy aspekt przy rozwijaniu dodatków (pluginów). Niebezpieczny dodatek może stać się źródłem problemów w całym serwisie internetowym. Podstawa jest następująca: nigdy nie możesz ufać wprowadzonym przez użytkowników danym. Wszystkie dane pochodzące od użytkowników lub z zewnętrznych źródeł muszą zostać sprawdzone, oczyszczone lub przetworzone (np. poprzez odpowiednie procedury escape) przed wprowadzeniem do bazy danych, systemu plików lub wyświetleniem na stronie.

Weryfikacja i przygotowanie danych

Weryfikacja to proces sprawdzania, czy dane wejściowe odpowiadają oczekiwanemu formacie – na przykład czy jest to adres e-mail, liczba lub czy należy do określonego przedziału. WordPress oferuje szereg pomocniczych funkcji do tego celu. is_email(), absint()Proces czyszczenia polega na usunięciu z danych wszystkich nielegalnych lub niebezpiecznych znaków na podstawie wcześniejszej weryfikacji. W przypadku tekstowych pola można użyć odpowiednich metod do eliminacji niepotrzebnych elementów. sanitize_text_field()

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%
// 在处理表单提交时
$user_input = $_POST['some_field'] ?? ''; // 使用空合并运算符避免未定义索引警告
// 清理输入
$clean_input = sanitize_text_field( $user_input );
// 验证是否是正整数
$clean_id = absint( $_POST['post_id'] );
if ( $clean_id <= 0 ) {
    // 处理无效ID的错误
}

Nie ma żadnych danych do wykonaania operacji escape przed wydaniem wyniku. Prosz o podanie tekstu, który potrzebuje zostać przetłumaczony.

Ucieleśnienie to proces zapewniający bezpieczne wyświetlenie danych w różnych kontekstach (np. HTML, JavaScript, URL). Jest to niezbyt istotne, aby zapobiec atakom typu XSS (Cross-Site Scripting). WordPress oferuje potężne funkcje do ucieleśnienia danych.
* esc_html()„:” jest używane do uniknięcia interpretacji elementów HTML w tekście, aby nie zostały wyświetlone w swoim standardowym formacie.
* esc_attr()Wartość atrybutu używana do escapeowania znaków HTML.
* esc_url()„:” jest używane do escapeowania adresów URL.
* wp_kses_post()Zezwala na bezpieczne wyświetlanie części kodu HTML na podstawie zdefiniowanego zbioru reguł.

// 在设置页面或前端输出用户数据时
echo '<div class="notice">'`. esc_html($clean_input)`.'</div>'echo '<input type="hidden" value="' . esc_attr( $clean_input ) . '">'echo '<a href="/pl/' . esc_url( $user_url ) . '/">link (na stronie internetowej)</a>'echo wp_kses_post($allowed_html_content); // Dozwolone są tagi HTML na poziomie artykułu

Ponadto, przy obsłudze zapytań do bazy danych zawsze należy używać klas dostępnych w WordPress. $wpdb Metody przetwarzania danych, lub wykorzystanie bardziej zaawansowanych API, np. WP_QueryZawierają w sobie zabezpieczenie przeciwko atakom typu SQL injection. Podczas wykonywania operacji na plikach używa się… wp_upload_dir()wp_handle_upload() Aby zapewnić bezpieczeństwo ścieżki, należy użyć odpowiednich API.

Używanie hooków (hooków) umożliwia wysoką rozszerzalność.

Źródłem potęgi systemu wtyczek WordPress jest mechanizm zwany “hakami” (ang. hooks), składający się z “działań” (ang. actions) i „filtrów” (ang. filters). Dzięki temu wtyczki mogą zmieniać zachowanie WordPress lub jego dane bez konieczności modyfikacji kodu źródłowego, a także inne programiści mogą rozwijać twoje wtyczki.

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

Zastosowanie i tworzenie aktywnych háków (ang. action hooks)

Aktywnie działające „haki” (ang. action hooks) wykonywają określony fragment kodu w określonym momencie czasu i nie wymagają żadnych wartości zwrotnych. Dodatki (ang. plugins) mogą korzystać z tysięcy wewnętrznych „haków” dostępnych w WordPress. init, wp_enqueue_scripts, save_postMożna też tworzyć własne „hakówki” (hooki), które będą dostępne dla innych programistów do wykorzystania.

Kod umieszczony na haczu (hooku) wygląda następująco:

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.
// 在文章内容前自动添加一个横幅
function myplugin_prepend_content( $content ) {
    if ( is_single() ) {
        $custom_text = '<div class="myplugin-banner">To jest reklamowa ramka.</div>';
        $content = $custom_text . $content;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_prepend_content' );

Uwaga: mimo że zmieniliśmy treść, użyliśmy w tym celu hooków filtrów. the_contentWymaga bowiem powrotu zmienionego wartości.

Tworzenie własnych hooków do działań (custom action hooks) do_action Funkcja:

// 在你的插件代码中定义一个动作点
function myplugin_complete_task() {
    // ... 执行一些任务 ...
    // 发出自定义动作,允许其他代码在此处添加功能
    do_action( 'myplugin_after_task_complete', $task_id, $result );
}

Inne wtyczki lub tematy można dodatkowo zainstalować poprzez… add_action('myplugin_after_task_complete', 'callback', 10, 2) Reaguj na tę akcję.

Zasada działania i przykłady filtrów hooków

Filtry hooki są używane do modyfikacji danych przed ich użyciem. Przyjmują jeden argument i muszą zwrócić inny argument (może on być zmieniony). To popularny sposób na to, by pluginy modyfikowały tekst, opcje lub wyniki zapytań.

Użyj włączonych filtrów:

// 修改文章摘要的长度
function myplugin_excerpt_length( $length ) {
    return 20; // 将摘要字数限制改为20字
}
add_filter( 'excerpt_length', 'myplugin_excerpt_length' );

Tworzenie własnych hooków do filtrów apply_filters Funkcja:

function myplugin_get_price( $product_id ) {
    $base_price = get_post_meta( $product_id, 'price', true );
    // 应用过滤器,允许其他代码动态修改价格(例如添加税费、折扣)
    $final_price = apply_filters( 'myplugin_product_price', $base_price, $product_id );
    return $final_price;
}

Dzięki temu twoje dodatkowe oprogramowanie (plugin) oferuje elastyczny interfejs, dzięki któremu inni programiści mogą łatwo modyfikować logikę obliczania cen, bez konieczności bezpośredniego edycji źródłowego kodu twojego pluginu.

Internacjonalizacja wtyczek oraz zarządzanie zasobami skriptów

Dojrzały plugin do WordPressa powinien obsługiwać funkcję internacionalizacji, aby móc zostać przetłumaczony na różne języki, a także skutecznie zarządzać zasobami CSS i JavaScript zarówno na stronie frontowej, jak i na stronie back-end.

Implementacja internacionalizacji wtyczek

Internacjonalizacja polega na użyciu specjalnych funkcji do obsługi wszystkich tekstów, które potrzebują tłumaczenia. W tym procesie występują dwa głównie kroki: pierwszy polega na załadowaniu plików z tłumaczeniami za pomocą odpowiednich elementów interfejsu (np. polów tekstowych), a drugi – na oznaczeniu w kodzie tekstów, które wymagają tłumaczenia.

Najpierw należy definiować to w nagłówku głównego pliku pluginu. Text Domain(Na przykład) my-first-pluginTo jest twoje pole tekstowe. Następnie, podczas inicjalizacji wtyczki (zwykle w momencie…) init (Haki), użyj load_plugin_textdomain Funkcja do ładowania plików tłumaczeniowych.

function myplugin_load_textdomain() {
    load_plugin_textdomain(
        'my-first-plugin', // 文本域,必须与文件头一致
        false, // 已弃用参数
        dirname( plugin_basename( __FILE__ ) ) . '/languages' // 语言文件存放的相对路径
    );
}
add_action( 'init', 'myplugin_load_textdomain' );

W kodzie należy używać… __() Przetłumacz i zwróć ciąg znaków, używając _e() Przetłumacz i wyślij bezpośrednio ciąg znaków.

$settings_title = __( 'My Plugin Settings', 'my-first-plugin' );
_e( 'Hello World!', 'my-first-plugin' );

Programiści mogą to wykorzystać. Poedit Zaawansowane narzędzia wykorzystują źródłowy kod, by wydobyć te ciągi tekstowe i na ich podstawie tworzyć kolejne elementy. .pot Plik szablonu. .po.mo Plik jest umieszczony w pluginie. /languages/ W katalogu.

Prawidłowe użycie CSS i JavaScriptu.

Nigdy nie wpisywać danych w sposób bezpośredni („hardcoded”) do plików PHP. <link><script> Za pomocą tagów można importować zasoby. WordPress oferuje jednolity system obsługi kolejek (enqueue), który umożliwia zarządzanie zależnościami między zasobami, kontrolę wersji oraz ustalenie momentu ich ładowania.

Co do zasobów w tle (back-end resources), należy używać… admin_enqueue_scripts Hak.

function myplugin_admin_scripts( $hook ) {
    // 只在特定插件设置页面加载
    if ( $hook != 'toplevel_page_myplugin-settings' ) {
        return;
    }
    wp_enqueue_style(
        'myplugin-admin-style', // 句柄
        plugins_url( 'css/admin-style.css', __FILE__ ), // 文件URL
        array(), // 依赖
        '1.0.0'  // 版本号,可用于强制浏览器更新缓存
    );
    wp_enqueue_script(
        'myplugin-admin-script',
        plugins_url( 'js/admin-script.js', __FILE__ ),
        array( 'jquery' ), // 依赖jQuery
        '1.0.0',
        true // 在页脚加载
    );
}
add_action( 'admin_enqueue_scripts', 'myplugin_admin_scripts' );

Co do zasobów front-end, należy używać… wp_enqueue_scripts „Hak” (ang. „hook”) – jego logika jest podobna do tej stosowanej w innych rozwiązaniach. Dzięki temu ułatwia się uporządkowanie procesu ładowania zasobów, unikają konfliktów pomiędzy nimi, a także można korzystać z cache’a w przeglądarcu.

Podsumowanie.

Rozwoj pluginów dla WordPress jest procesem złożonym, który rozpoczyna się od stworzenia standardowego pliku głównego i obejmuje budowę interfejsu administracyjnego, bezpieczne obsługiwanie danych, wykorzystanie kluczowych mechanizmów („hooków”) w kodzie oraz wsparcie dla różnych języków. Posłuchanie najlepszych praktyk, zwłaszcza stosowania rygorystycznych zasad bezpieczeństwa danych oraz głębokiej znajomości mechanizmów hooków, jest kluczowym elementem przy tworzeniu stabilnych, bezpiecznych i rozszerzalnych pluginów przeznaczonych do biznesowego użytkowania. Poprzez racjonalne wykorzystanie API do konfiguracji oraz zasobów skryptów można znacząco poprawić jakość pluginu i przyjemność użytkownika. Programiści powinni zawsze uwzględnić możliwość tłumaczeń w kodzie, aby rozszerzyć zakres zastosowania pluginu.

FAQ – najczęściej zadawane pytania.

Jaki najprostszzy plugin do WordPressa musi zawierać?

Najprostszego pluginu wystarczy tylko jeden plik w formacie PHP, który musi zawierać standardowe komentarze opisujące strukturę pluginu. Najważniejszym z tych komentarzy jest ten, w którym podaje się nazwa pluginu. W tym pliku możesz bezpośrednio pisać kod PHP lub dodawać nowe funkcje za pomocą “hooków” (zawansowanych mechanizmów interakcji z systemem).

Na przykład, plugin zawierający krótki kod, który generuje wydanie “Hello World”, będzie wymagał tylko takiego jednego pliku, by móc funkcjonować.

Jak pluginy interagują z bazą danych WordPress?

Zaleca się korzystać z wewnętrznych klas do operacji z bazą danych dostępnych w WordPress. $wpdbOferuje bezpieczne metody wyszukiwania danych, szczególnie… prepare Metody te mogą skutecznie zapobiegać atakom typu SQL injection.

Dla większości operacji z danymi (np. pobierania artykułów, edycji metadanych) zaleca się używać zaawansowanych funkcji dostępnych w WordPress. get_posts(), WP_Query, get_post_meta(), update_post_meta() Itp. Te funkcje już na poziomie podstawowym rozwiązują problemy z bezpieczeństwem i ustawieniem cache. W przypadku własnych struktur danych programiści mogą tworzyć tabeli danych na potrzeby pluginu w momencie jego aktywacji.

Gdzie mogę znaleźć wszystkie dostępne akcje i hooki filtrów?

Oficjalne dokumentacje rozwojowe WordPress są najlepszym źródłem informacji o hookach. Ponadto programiści mogą też wyszukać hooki bezpośrednio w źródłowym kodzie jądra WordPress.

Otworź katalog główny WordPressa w edytorze kodu i wykonaj wyszukiwanie. do_actionapply_filters Można znaleźć informacje o wezwaniach funkcji, w tym o wszystkich zdefiniowanych „hookach” (elementach interfejsu) oraz ich parametrach. Wiele online źródeł informacyjnych zawiera również listy najczęściej używanych „hooków”.

Jak debugować kod mojego pluginu dla WordPress?

Najpierw upewnij się, że masz wszystko niezbędne w swoim… wp-config.php W pliku włączony został tryb debugowania: define( 'WP_DEBUG', true );To umożliwi wyświetlanie błędów i ostrzeżzeń w PHP. Aby uniknąć widoczności tych informacji dla odwiedzających, można to ustawić jednocześnie. define( 'WP_DEBUG_DISPLAY', false ); Zarejestruj błąd w pliku logów:define( 'WP_DEBUG_LOG', true );

Po drugie, użyj error_log() Funkcja zapisała informacje o debuggowaniu do pliku logów. W przypadku złożonych struktur danych (np. tablic, obiektów) można to połączyć z odpowiednimi procedurami obsługi tych struktur. print_r()var_dump() Informacje powinny być wyświetlone wyłącznie po uwieromienieniu administratora, aby uniknąć ich ujawnienia. Używanie profesjonalnych narzędzi do debugowania w PHP, takich jak Xdebug, umożliwia efektywniejsze wykonywanie procedur debugowania, w tym ustawianie punktów przerwania i śledzenie wykonywania kodu („stack tracking”).