Kompletní průvodce vývojem WordPress pluginů: Postavte si svůj první funkční plugin od nuly

Čtení za 3 minuty.
2026-03-18
2026-06-03
2,528
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.

Přípravné práce a konfigurace prostředí

Než začnete psát kód, potřebujete vhodné vývojové prostředí. To zahrnuje lokální instalaci WordPressu, editor kódu a také základní znalosti potřebné k efektivnímu vývoji webových stránek.

Nejprve se ujistěte, že máte k dispozici lokální serverové prostředí. Můžete použít nástroje jako XAMPP, MAMP, Local by Flywheel nebo Docker k rychlému nastavení serveru. Po instalaci a konfiguraci WordPressu máte k dispozici bezpečné „sandboxové“ prostředí, ve kterém můžete provádět testy, aniž byste museli mít obavy o to, že by to ovlivnilo vaše webové stránky v reálném prostředí.

Dále potřebujete pohodlný editor kódu. Visual Studio Code, PhpStorm nebo Sublime Text jsou výborné volby – všechny poskytují dobrou podporu pro PHP, HTML, JavaScript a CSS, a mají funkce pro výrazné zvýraznění kódu, automatické doplňování textu a ladění programů.

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

Na závěr je velmi důležité pochopit základní strukturu WordPress pluginů. Plugin je v podstatě jedna nebo více PHP souborů, které jsou uloženy v adresáři instalace WordPress. /wp-content/plugins/ V té složce se nachází několik pluginů. Každý plugin musí mít hlavní soubor, který obsahuje specifické informace o tomto pluginu – ty slouží k označení tohoto pluginu systému 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.

Vytvoření a deklarace hlavního souboru pluginu

Prvním krokem při vytváření pluginu je vytvoření hlavního souboru a přidání správných hlavičkových poznámek. Tento soubor se obvykle jmenuje podle funkce pluginu. my-first-plugin.phpProsím, proveďte to ve svém lokálním prostředí. /wp-content/plugins/ V adresáři vytvořte novou složku a pojmenujte ji… my-first-pluginPoté v této složce vytvořte hlavní soubor.

Záhlaví pluginu je soubor obsahující metadata o tomto pluginu – informuje WordPress o jeho názvu, popisu, verzi, autorovi a dalších detailech. Zde je příklad nejzákladnějšího záhlaví pluginu:

<?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 uložení tohoto souboru se přihlaste do svého WordPress administrátorského účtu a přejděte na stránku “Příslušenství” (Plugins). Měli byste vidět nový příslušenství s názvem “Moje první funkční příslušenství” v seznamu příslušenství. Nyní můžete tento příslušenství aktivovat, i když zatím nemá žádnou skutečnou funkci.

Core Architecture: Action and Filter Hooks

Podstatou silné rozšiřitelnosti WordPressu je jeho systém hooků, který umožňuje vývojářům vložit svůj vlastní kód v určité časové momenty nebo před/po použití dat. Hooky se dělí na dvě kategorie: akce (Actions) a filtry (Filters).

Doporučujeme k přečtení. Úvodní průvodce vývojem WordPress temát: Vytvořte si vlastní šablonu webové stránky od nuly

Akční háčky vám umožňují spouštět vlastní funkce při nastání konkrétních událostí v WordPressu. Například, když je přidán nový článek…publish_postPři načítání menu v administračním rozhraní…admin_menu) nebo při načítání skriptů v hlavičce webové stránky (wp_enqueue_scriptsPoužijte. add_action() Funkce slouží k připojení vaší funkce k akčnímu háčku (action hook).

Použijte akční háčky k přidání zadního menu.

Předpokládejme, že chceme pro náš plugin přidat stránku s nastaveními do administrace WordPressu. Pro to použijeme… admin_menu Tento akční hook – přidejte tento kód do svého hlavního souboru, a to za informacemi o hlavičce 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>Vítejte na stránce nastavení mého prvního doplňku!</p>
    </div>
    <br />&lt;?php
}

Filtrovací háčky vám umožňují upravovat data. Přijímají hodnotu, která po zpracování vaší funkce musí být vrácena ve změněné podobě. Například při úpravě nadpisu článku.the_title), změny obsahu článku (the_content) nebo změnit délku výňatku (excerpt_lengthPoužijte. add_filter() Funkce slouží k připojení vaší funkce k filtrovacímu háku (filter hook).

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.

Upravení obsahu článku pomocí filtrů

Vytvořme si jednoduchou funkci, která automaticky přidává uvedení autorských práv na konci každého článku.

// 在文章内容后添加自定义文本
function mfp_add_copyright_to_content( $content ) {
    // 仅对网站前端的主循环中的文章生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Prohlášení o autorských právech: Obsah tohoto článku patří našemu webu. Při přepisování článku prosím uveďte zdroj.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_to_content' );

Implementace konkrétních funkcí: zkratky a stručné kódy

Shortcode je výkonná funkce poskytovaná WordPressem, která umožňuje uživatelům vložit do článků nebo stránek jednoduchý značkovací kód (tzv. „shortcode“), aby tak snadno přidali speciální obsah, funkce nebo styly. [my_shortcode]To umožňuje vytvářet komplexní dynamický obsah nebo provádět specifické funkce. Poskytuje tak tvůrcům obsahu velkou flexibilitu.

Vytvořte a zaregistrujte jednoduchý šifrovací kód.

Vytvoření zkratky vyžaduje dvě kroky: nejprve definování funkce pro zpracování této zkratky a poté její použití. add_shortcode() Funkce je registrována v WordPressu. Vytvořme si zkratku, která zobrazí aktuální datum a pozdrav.

Doporučujeme k přečtení. Od základů až po dokonalost: Kompletní průvodce vývojem pluginů pro WordPress a praktické návody

// 定义简码的处理函数
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>Aktuální čas je: %s</p>'`, esc_html($current_time));  
$output .= '</div>';

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

Nyní mohou uživatelé toto využívat v editoru článků. [greeting name="张三"]Na stránce se pak zobrazí: “Zhang San, dobrý den! Aktuální čas je: 2026-…”. Pokud nejsou zadány žádné parametry, je výchozí hodnota “Návštěvník”.

Pokročilé praktiky: Vytváření databázových tabulek a volitelných stránek

Komplexnější pluginy mohou potřebovat ukládat vlastní data. WordPress nabízí dvě hlavní možnosti: použití API pro nastavení WordPressu k ukládání jednoduchých dat ve formátu klíč-hodnota, nebo vytvoření vlastních databázových tabulek pro ukládání strukturovaných dat.

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.

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

Možnosti API jsou velmi vhodné pro ukládání konfiguračních informací pluginů. Dokončíme stránku pro nastavení v pozadí, kterou jsme již vytvořili, aby byla schopna ukládat a číst jednoduchá nastavení.

Nejprve musíme vytvořit formulář. mfp_settings_page() Do funkce přidejte jednoduchý formulář pro zpracování nastavení:

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>Nastavení bylo uloženo!</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">Vlastní zpráva:</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">Tento text se zobrazí při použití zkratky [show_message].</p>
                    </td>
                </tr>
            </table>
            <?php submit_button( '保存更改', 'primary', 'mfp_submit_settings' ); ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Poté vytvoříme nový zkratek, který bude sloužit k zobrazení uložené zprávy:

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' );

Nyní mohou administrátoři v nastaveních pluginu přizpůsobit zprávy podle svých požadavků, zatímco autoři stačí tyto zprávy použít přímo v článcích. [show_message] Pro výstup tohoto zprávy stačí použít zkratku.

Při aktivaci pluginu je vytvořen vlastní tabulka.

Pro pluginy, které potřebují ukládat data o objednávkách, protokolech a dalších komplexních relačních datech, může být nutné vytvořit vlastní databázové tabulky. Tento proces se obvykle provádí při aktivaci pluginu. WordPress k tomu poskytuje možnosti. register_activation_hook Definujte funkci, která se spustí při aktivaci.

Pozor: Následující kód je pouze ukázkový. Při skutečném vývoji je třeba použít přísnější způsoby zpracování chyb a abstraktní vrstvy pro práci s databází. $wpdbPoužití…

// 插件激活时运行的函数
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' );

Závěr

Díky této příručce jste prošli základními kroky vývoje WordPress pluginů. Začali jste od nastavení prostředí a napsání hlavičky pluginu, naučili jste se využívat akce a filtrovací hooky k rozšíření funkcí WordPress, poskytli jste uživatelům flexibilní způsoby vložení obsahu pomocí zkratkovacích kódů a zvládli jste základy ukládání nastavení pomocí API pro volby (Options API) a vytváření vlastních databázových tabulek. To vše jsou základy pro vytvoření funkčního pluginu. Nezapomeňte, že správná struktura kódu, bezpečnost (např. ověřování nonce a kontrola oprávnění) a příprava na internacionalizaci jsou nezbytné součásti profesionálního vývoje pluginů. Dalším krokem může být prozkoumání WordPress REST API, vlastních typů článků, metadat (Meta Boxes) a standardního zavádění front-end skriptů a stylů, abyste vytvořili ještě složitější a výkonnější pluginy.

Časté dotazy

Může mít jeden plugin pouze jediný hlavní soubor?

Není to tak. Plugin může obsahovat více PHP souborů. Musí však existovat hlavní soubor, který obsahuje informace o hlavičce pluginu – to je vstupní bod pro WordPress, který rozpoznává daný plugin. Komplexní pluginy obvykle organizují kód pro různé funkce do více souborů a tyto soubory jsou poté zaváděny prostřednictvím hlavního souboru, což umožňuje lepší správu kódu a modularitu.

Jak bezpečně zpracovat data odeslaná uživateli prostřednictvím formulářů na straně klienta (frontend)?

Při zpracovávání dat odeslaných uživateli je nutné provést přísnou validaci, čištění a escapeování těchto dat. Pro vstupní data se používají určité způsoby zpracování, které zajistí, že data budou v požadovaném formátu a neobsahují žádné neplatné nebo škodlivé informace. sanitize_text_field()sanitize_email()sanitize_textarea_field() Použijte funkce k úklidu. Pro data vypisovaná na HTML stránky použijte… esc_html()esc_attr()wp_kses_post() Proveďte escapeování. Zároveň je nutné využít mehanismus nonce od WordPressu k zabránění podvržení cross-site requestů (CSRF – Cross-Site Request Forgery). current_user_can() Zkontrolujte oprávnění uživatele.

Jak může můj plugin zabránit konfliktům názvů funkcí s jinými pluginy?

Nejlepší praxí je používat jmenné prostory (PHP 5.3+) nebo umístit všechny funkce, třídy a konstanty pod jedinečný předponový řád. Například všechny funkce v této příručce začínají předponou “mfp_” (zkratka pro „My First Plugin“). Pokud používáte objektově orientované programování, je také efektivním způsobem řešení konfliktů při pojmenovávání zakódovat dané prvky do tříd.

Po dokončení vývoje, jak distribuovat plugin nebo jej umístit do oficiálního katalogu?

Chcete-li odeslat plugin do oficiálního adresáře pluginů na WordPress.org, musíte vytvořit balíček pluginu, který splňuje požadavky tohoto adresáře. To obvykle zahrnuje standardizovanou strukturu souborů. README.txtKromě toho je k dispozici podrobná podpora při překladu, prohlášení o kompatibilitě a kód splňuje standardy kódování WordPress. Je nutné si na stránkách WordPress.org zaregistrovat vývojářský účet a poté použít nástroj SVN k odeslání kódu do určeného repozitáře.