Průvodce vývojem pluginů pro WordPress: Vytvoření vlastních funkčních modulů od nuly

Čtení za 3 minuty.
2026-03-16
2026-06-03
2,476
Získávám provize, když nakupujete prostřednictvím níže uvedených odkazů, aniž by vás to něco stálo navíc.

Síla WordPressu spočívá nejen v jeho základních funkcích, ale také v možnosti nekonečného rozšíření pomocí pluginů. Když potřebujete do svého webu přidat funkci, kterou není možné dosáhnout pomocí stávajících pluginů, je velmi důležité se naučit vytvářet vlastní pluginy. Tento průvodce vás provede od základních konceptů a postupně vás naučí, jak vytvořit svůj první plně funkční WordPress plugin, čímž získáte základní dovednosti v přizpůsobeném vývoji.

Vývojové prostředí pro pluginy a jeho základní struktura

Než začnete psát kód, potřebujete vhodné vývojové prostředí a jasnou strukturu projektu. To vám nejen umožní pracovat efektivně, ale také zajistí, že váš plugin bude splňovat standardy WordPressu, což usnadní jeho pozdější údržbu a distribuci.

Nastavení lokálního vývojového prostředí

Doporučujeme použít lokální serverové software, jako jsou XAMPP, MAMP nebo Local by Flywheel, pro nastavení prostředí pro WordPress. To vám umožní bezpečně provádět testování a ladění na vlastním počítači. Zároveň se ujistěte, že váš editor kódu (např. VS Code, PhpStorm) podporuje výrazné zvýraznění PHP syntaxe a podporu při psaní kódu, což výrazně zvýší efektivitu vývoje.

Doporučujeme k přečtení. Návod k vývoji pluginů pro WordPress: vytvořte svůj první plugin od nuly.

Porozumění základní struktuře pluginu

Nejjednodušší WordPress plugin může obsahovat pouze jeden soubor, avšak plugin s dobře strukturovanou architekturou obvykle zahrnuje více adresářů a souborů. Nejdůležitějším souborem je hlavní soubor pluginu, který musí obsahovat specifickou poznámku („plugin header“), sloužící k označení toho, že se jedná o plugin určený pro systém WordPress.

UltaHost – hosting služby pro weby postavené na platformě WordPress
Záruka vrácení peněz do 30 dnů, neomezený šířka pásma a databáze, bezplatná ochrana proti DDoS útokům. Sleva 501 TP4T při nákupu na 3 roky.

Hlavní soubor pluginu se obvykle nazývá podle funkce tohoto pluginu, například…my-custom-functionality.phpNa jeho vrcholu musí být obsažen standardní záhlaví informací o pluginu.

<?php
/**
 * Plugin Name:       我的定制功能模块
 * Plugin URI:        https://example.com/my-custom-plugin
 * Description:       这是一个用于演示的WordPress定制功能插件。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-custom-plugin
 */

Tento komentář uvádí zdroj informací, který je identifikován a zobrazen na stránce “Příslušenství” (Plugins) v administraci WordPressu.Text DomainUrčeno pro mezinárodní překlad. Poté by měl být veškerý funkční kód napsán do tohoto souboru nebo do jiných souborů, které jsou z tohoto souboru importovány.

Core Development: Action Hooks and Filters

Architektura pluginů pro WordPress je založena na systému “hooků” (anglicky „hooks“), který představuje základ jejich rozšiřitelnosti. Porozumění a obratné využívání hooků je klíčové pro vývoj pluginů. Hooky se dělí především na dvě kategorie: akční hooky (Action Hooks) a filtrovací hooky (Filter Hooks).

Přidání funkce pomocí akčních háčků

Akční háčky vám umožňují “vložit” a spustit vlastní PHP funkce v určitém čase nebo při nastání určité události. Například můžete chtít provést nějakou operaci při zveřejnění článku, nebo přidat vlastní kód do patra webové stránky.

Doporučujeme k přečtení. Od nuly ke jedničce: Kompletní průvodce vývojem WordPress pluginů a osvědčené postupy

Můžete použít…add_action()Funkce nakonfiguruje vaši vlastní funkci tak, aby byla připojena k určitému akčnímu hooku. Následující příklad ukazuje, jak přidat vlastní metapole na stránce pro úpravu článků v administračním panelu.

// 将函数挂载到‘add_meta_boxes’这个动作钩子
add_action( 'add_meta_boxes', 'mcp_add_custom_meta_box' );

function mcp_add_custom_meta_box() {
    add_meta_box(
        'mcp_custom_box_id',          // 元框的唯一ID
        '自定义设置',                 // 元框标题
        'mcp_custom_meta_box_html',   // 回调函数,用于输出HTML内容
        'post',                       // 在‘文章’编辑页面显示
        'side',                       // 显示在侧边栏
        'high'                        // 优先级
    );
}

// 定义输出元框HTML内容的回调函数
function mcp_custom_meta_box_html( $post ) {
    // 获取已保存的值
    $value = get_post_meta( $post->ID, '_mcp_custom_field', true );
    // 输出一个非安全字段
    echo '<label for="mcp_field">自定义字段:</label>';
    echo '<input type="text" id="mcp_field" name="mcp_field" value="' . esc_attr( $value ) . '" />';
}

Upravování dat pomocí filtrovacích hooků

Filtrovací háčky vám umožňují upravovat jakékoli data, která vznikají během zpracování obsahu v WordPressu. Na rozdíl od akčních háčků musí funkce určené k filtrování přijmout určitou hodnotu a následně vrátit upravenou verzi této hodnoty. Můžete je využít k různým účelům, např. k filtrování obsahu, úpravě dat před zobrazením nebo k provedení dalších operací s daty.add_filter()Funkce slouží k přidání filtrů.

Například, pokud změníte obsah článku na konci, automaticky se přidá odstavec s uvedením autorských práv.

Shared hosting na hosting.com
Vysoký výkon, vybavený procesorem AMD EPYC, úložištěm NVMe SSD a LiteSpeedem, nepřetržitá interní podpora odborníků 24 hodin denně a 7 dní v týdnu, pokročilá bezpečnostní opatření včetně SSL, ochrany proti útokům hrubou silou, malwaru a DDoS, úspora až 731 TB/měsíc.
add_filter( 'the_content', 'mcp_add_copyright_to_content' );

function mcp_add_copyright_to_content( $content ) {
    // 仅对单篇文章页面生效
    if ( is_single() ) {
        $copyright_text = '<p><em>Copyright to this article belongs to this website. Please indicate the source when reproducing it.</em></p>';
        $content .= $copyright_text;
    }
    // 必须返回修改后的内容
    return $content;
}

Implementace správy dat pluginů

Pluginy obvykle potřebují ukládat, číst a aktualizovat data. WordPress poskytuje výkonné API pro nastavení (Options API) a metadata článků (Article Metadata API), které umožňují bezpečně zpracovávat tyto požadavky, a to bez přímého přístupu k databázi.

Ukládání nastavení pomocí API pro volby

Pro globální nastavení pluginů (jako jsou API klíče, stav přepínačů atd.) by měla být použita volitelná API (option API). Poskytujeadd_option()get_option()update_option()Funkce jako `wait` slouží k správě dat založených na klíčových hodnotách.

Například vytvoření jednoduchého nastavení přepínače pro plugin.

Doporučujeme k přečtení. Ovládnutí vývoje pluginů pro WordPress: Postavte si svůj první rozšiřující modul od nuly

// 在插件激活时设置一个默认选项(通常写在激活钩子函数里)
register_activation_hook( __FILE__, 'mcp_plugin_activate' );
function mcp_plugin_activate() {
    if ( false === get_option( 'mcp_feature_enabled' ) ) {
        add_option( 'mcp_feature_enabled', 'yes' );
    }
}

// 在代码中获取这个选项的值
$is_enabled = get_option( 'mcp_feature_enabled', 'yes' ); // 第二个参数是默认值
if ( $is_enabled === 'yes' ) {
    // 执行功能
}

Uložení a načtení metadat článku

Pro data spojená s konkrétními články, stránkami nebo vlastními typy článků (jako jsou vlastní pole uvedená v příkladu s metadaty) je nutné použít API pro článkové metadaty (Post Meta). Klíčovou funkcí je…update_post_meta()get_post_meta()

Potřebujete sledovat (nebo naslouchat) nějakým událostem, signálům nebo informacím.save_postAkční háčky slouží k uložení dat, která uživatel zadá do předních metadokumentů. Při uložení je nutné provést bezpečnostní ověření (kontrola Nonce) a ověření oprávnění.

Shared hosting od InterServeru
Sdílený hosting za 1 TB + 5 TB měsíčně za 2,50 USD, slevový kód tryinterserver pro první měsíc za 1 TB + 5 TB za 0,1 USD, a 461 skriptů cloudových aplikací k jednoduché instalaci.
add_action( 'save_post', 'mcp_save_custom_field_data' );

function mcp_save_custom_field_data( $post_id ) {
    // 检查Nonce字段(应在元框HTML中输出wp_nonce_field)
    if ( ! isset( $_POST['mcp_meta_box_nonce'] ) || ! wp_verify_nonce( $_POST['mcp_meta_box_nonce'], 'mcp_save_data' ) ) {
        return;
    }
    // 检查自动保存
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    // 检查用户权限
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    // 安全地获取并保存字段数据
    if ( isset( $_POST['mcp_field'] ) ) {
        $my_data = sanitize_text_field( $_POST['mcp_field'] );
        update_post_meta( $post_id, '_mcp_custom_field', $my_data );
    }
}

Vytvořit stránku pro správu pluginů

Pro pluginy s komplexními funkcemi je obvykle potřeba vlastní stránka pro správu nastavení, která umožňuje správci webu konfigurovat různé možnosti pluginu. WordPress poskytuje bohatou sadu API pro vytváření správních menu a stránek s jednotným vzhledem.

Přidat hlavní správní menu

Použitíadd_menu_page()Funkce umožňuje přidat do levého navigačního panelu v pozadí vašeho pluginu hlavní menuový příkaz. Je potřeba zadat název stránky, název menu, požadovaná oprávnění, přezdívku menu, funkci na zobrazení obsahu stránky a další parametry.

add_action( 'admin_menu', 'mcp_register_admin_menu' );

function mcp_register_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单名称
        'manage_options',         // 所需权限(通常为manage_options)
        'mcp-plugin-settings',    // 菜单别名(slug)
        'mcp_render_settings_page', // 渲染页面的回调函数
        'dashicons-admin-generic', // 图标(使用Dashicons)
        80                         // 菜单位置
    );
}

// 定义渲染设置页面的函数
function mcp_render_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/cs/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、非安全字段等(需要配合settings API使用)
            settings_fields( 'mcp_settings_group' );
            do_settings_sections( 'mcp-plugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Vytvoření formuláře pomocí API pro nastavení

Pro bezpečnější a standardnější zpracování možností formulářů doporučujeme výrazně používat API nastavení (Settings API) WordPressu. Tento nástroj automaticky zpracovává ověřování „Nonce“, kontrolu oprávnění, ukládání dat a zobrazování chybových zpráv. Klíčové kroky zahrnují:register_setting()Registrovací nastavení, použitíadd_settings_section()Přidat oblast nastavení a její použití.add_settings_field()Přidejte konkrétní pole nastavení.

Tím je zajištěno, že stránka pro nastavení vašeho pluginu je v souladu se stylizací jádra WordPress a dodržuje nejlepší bezpečnostní postupy.

Závěr

Díky této příručce jste prošli základními kroky vývoje WordPress pluginů: začali jste vytvářením vývojového prostředí a pochopením základní struktury pluginů, poté jste se podrobněji seznámili se systémem hooků, který je jádrem rozšiřitelnosti WordPressu, a naučili se, jak pomocí akcí a filtrů přidávat nebo upravovat funkce. Následně jste zvládli bezpečné správování dat pluginů pomocí API pro nastavení a metadata článků. Nakonec jste také pochopili, jak vytvořit profesionální a bezpečné stránky pro nastavení pluginů.

Vývoj doplňků je proces, který vyžaduje velkou praxi – skutečné ovládnutí této dovednosti přichází až při samotném vytváření konkrétních řešení. Doporučujeme začít s jednoduchým požadavkem, např. “Přidat pod každým článkem informace o autorovi”, a postupně aplikovat znalosti, které jste získali. Neustále se přitom vzdělávejte a zkoumejte nové moOficiální příručka pro pluginy WordPressDíky referencím ke kódu budete schopni vytvořit výkonné a elegantně napsané personalizované pluginy, které skutečně uvolní veškerý potenciál WordPressu.

Časté dotazy

Jaké předpokládané znalosti jsou potřebné k vývoji pluginu pro WordPress?

Potřebujete mít základní znalosti programování v PHP, porozumění HTML a CSS, a také představu o základních konceptech WordPressu (jako jsou články, stránky, cykly, šablony atd.). Znalost objektového programování (OOP) není nutná, ale je velmi užitečná při vytváření složitějších doplňků (pluginů).

Musí mít hlavní soubor pluginu určitý název?

Neexistují žádné povinné požadavky, ale pro přehlednost a standardizaci se obvykle doporučuje používat názvy, které popisují funkce daného pluginu.my-gallery-plugin.phpJediným požadavkem je, aby na začátku tohoto souboru byly správné poznámky týkající se hlaviček pluginů. WordPress pomocí těchto poznámek rozpoznává pluginy.

Jak zajistit, aby můj plugin nekonfliktoval s jinými pluginy?

Přidávání jedinečné předpony ke všem vašim funkcím, třídám, konstantám a názvům možností je nejlepší praxí pro prevenci kolizí. Například, nepoužívejte…get_data()Pro tak obecně používané funkce by se měly používat názvy, které jsou jasně vysvětlující a jednoznačné.mcp_get_data()(Předpokládejme, že zkratka vašeho pluginu je mcp.) Stejně tak by názvy možností měly být podobné.mcp_settings_array

Po dokončení vývoje, jak distribuovat pluginy ostatním k použití?

Sbalte svou složku s pluginy do souboru typu ZIP. Uživatelé mohou tento soubor následně nahrát a nainstalovat přímo na stránce “Pluginy” → “Nainstalovat plugin” → “Nahrát plugin” v administraci WordPressu. Pokud chcete svůj plugin zveřejnit v oficiálním adresáři pluginů WordPressu, musíte dodržovat přísnější pravidla.Průvodce podávánímA také přijmout revizi kódu.

Měl bych pro vývoj pluginu použít procedurální, nebo objektově orientovaný přístup?

Pro jednoduché, malé pluginy je přístup založený na postupném řešení problémů (použití samostatných funkcí) přímější a rychlejší. U větších, složitějších pluginů však přístup založený na objektovém programování (použití tříd) umožňuje lépe organizovat kód, což zvyšuje jeho udržovatelnost a znovupoužitelnost. Oba přístupy jsou v komunitě WordPress široce přijímány.