Návod k vývoji pluginů pro WordPress: Vytvořte si své první rozšíření s vlastními funkcemi od nuly.

Čtení za 4 minuty.
2026-03-17
2026-06-03
2,768
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.

Proč je potřeba vytvářet vlastní doplňky (pluginy)?

WordPress je známý svou vysokou rozšiřitelností a jedním z klíčových faktorů této rozšiřitelnosti je právě systém pluginů. Když potřeby webové stránky přesahují možnosti daného tématu nebo stávajících pluginů, je nejlepší volbou vytvořit si vlastní plugin. To je lepší než přímo upravovat samotné téma. functions.php Ve srovnání s vytvářením samostatných souborů má vytvoření nezávislého pluginu významné výhody. Plugin je oddělen od tématu, což znamená, že i po změně tématu funkce pluginu zůstávají zachovány, což zajišťuje jeho nezávislost a udržovatelnost. Kromě toho může dobře strukturovaný plugin být snadno přesunut mezi různými webovými stránkami a znovu použit, a dokonce může být distribuován prostřednictvím oficiálních nebo třetích stran.

Vývoj vlastních pluginů vám umožňuje přesně ovládat logiku funkcí a vyhnout se tak výkonovým nárokům a potenciálním konfliktům kódu způsobeným instalací příliš mnoha obecně používaných pluginů. Od jednoduché generace krátkého kódu až po složité zpracování dat a správu pracovních postupů, vývoj pluginů vám otevírá dveře k hlubokému přizpůsobení WordPressu.

Vytvoření základní struktury vašeho prvního pluginu

WordPress plugin je v podstatě jeden nebo více modulů, které jsou umístěny… wp-content/plugins/ PHP soubory v adresáři. Prvním krokem při vytváření pluginu je vytvoření jeho základní struktury.

Doporučujeme k přečtení. Průvodce vývojem WordPress pluginů: Postavte si svůj první funkční plugin od nuly

Vytvoření hlavního souboru pluginu a přidání úvodních poznámek

Nejprve, wp-content/plugins/ V adresáři vytvořte nový složku, například… my-first-pluginPoté v této složce vytvořte hlavní PHP soubor, který obvykle nese stejné jméno jako složka:my-first-plugin.php

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.

Na začátku souboru musí být obsaženy poznámky typu „plugin header“ v souladu se standardy WordPressu – ty jsou klíčové pro rozpoznání pluginu systémem WordPress. Tyto poznámky poskytují základní informace o pluginu a budou zobrazeny na stránce pro správu pluginů v administraci.

<?php
/**
 * Plugin Name:       我的第一个自定义插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习的 WordPress 自定义插件示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Po uložení souboru se přihlaste do administrace WordPressu a přejděte na stránku “Příslušenství” (Plugins). Měl by se vám zobrazit příslušenství s názvem “Můj první vlastní plugin” v seznamu. Můžete ho aktivovat nebo deaktivovat. V tuto chvíli nemá žádnou skutečnou funkci.

Vytvoření bezpečného obalu pro funkce pluginu

Aby se předešlo konfliktům mezi názvy funkcí a názvy témat nebo jiných pluginů, je osvědčenou praxí všechny funkce zabalit do jedné třídy, nebo všem funkcím přidat jedinečný předponový název. Zde použijeme metodu založenou na třídách, která poskytuje lepší zabalení a organizační strukturu.

V hlavním souboru, za hlavičkovými poznámkami, můžeme začít definovat hlavní třídu pluginu.

Doporučujeme k přečtení. Kompletní průvodce vývojem WordPress pluginů: Vytvořte si svůj první funkční plugin od nuly

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问文件
}

class My_First_Plugin {
    /**
     * 构造方法,用于初始化插件
     */
    public function __construct() {
        // 初始化钩子
        $this->init_hooks();
    }

/**
     * 初始化 WordPress 钩子(动作和过滤器)
     */
    private function init_hooks() {
        // 后续的钩子将在这里添加
    }
}

// 初始化插件
new My_First_Plugin();

projít (účtem, kontrolou atd.) if ( ! defined( 'ABSPATH' ) ) Tímto kódem jsme zajistili, že k této souborce lze přistupovat pouze prostřednictvím prostředí WordPress, čímž jsme zvýšili bezpečnost. Nyní je základní rámec pluginu hotov.

Využitím hooků lze rozšířit základní funkce WordPressu.

Jádrem API pro pluginy v WordPressu jsou “hooky” (závěsy), které vám umožňují spouštět vlastní kód v určitých okamžicích nebo na základě konkrétních dat. Hooky se dělí na dvě kategorie: akce (Actions) a filtry (Filters).

Porozumět a přidat jednoduchý akční hook

Akční hooky spouštějí váš kód při nastání určitých událostí, např. při zveřejnění článku nebo načtení správní stránky. Nevrací žádné hodnoty, pouze “udělají” něco konkrétního.

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.

Přidáme funkci, která automaticky vloží určitý text na konci každého článku. Pro to použijeme… the_content Tento filtr (ano, i když se nazývá filtr, často se používá k přidávání obsahu; technicky vzato je to skutečně filtr, protože přijímá a vrací obsah). Ale abychom nejprve demonstrovali čistou akci, přidáme také akci, která zobrazí zprávu v panelu pro správu v pozadí.

Nejprve, init_hooks Přidání hooků k registraci do metody:

private function init_hooks() {
    // 在文章内容末尾添加信息的过滤器
    add_filter( 'the_content', array( $this, 'append_custom_text' ) );
    // 在管理栏添加节点的动作
    add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_node' ), 999 );
}

Poté definujte v třídě odpovídající metody na zpracování událostí (callback methods).

Doporučujeme k přečtení. Kompletní průvodce vývojem WordPress pluginů: Od základů po dokonalé vytváření vlastních funkcí

/**
 * 在文章内容末尾添加自定义文本(过滤器回调)
 *
 * @param string $content 原始文章内容。
 * @return string 修改后的文章内容。
 */
public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Tento text je technicky podpořen “Mým prvním pluginem”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}

/**
 * 在管理工具栏添加一个自定义节点(动作回调)
 *
 * @param WP_Admin_Bar $wp_admin_bar WordPress 管理栏对象。
 */
public function add_admin_bar_node( $wp_admin_bar ) {
    $args = array(
        'id'    =&gt; 'my_plugin_node',
        'title' =&gt; '我的插件',
        'href'  =&gt; admin_url( 'plugins.php' ),
        'meta'  =&gt; array( 'class' =&gt; 'my-plugin-node' )
    );
    $wp_admin_bar-&gt;add_node( $args );
}

Nyní, po aktivaci pluginu, se přidaný text zobrazí na spodní části jednotlivých článků na webové stránce a v horní části administračního panelu na straně administrátora se objeví položka menu “Moje pluginy”.

Použitím filtrů upravujeme výstup dat.

Filtry slouží k úpravě dat, která jsou předána v určitém okamžiku. Přijímají hodnotu a musí vrátit upravenou hodnotu. To jsme použili výše. append_custom_text Metoda je vlastně pouze zpětný volání (callback) filtru. Vytvořme si ještě jeden typičtější příklad filtru: úprava délky shrnutí článku.

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.

init_hooks Přidat do seznamu:

add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), 999 );

Poté definujte metodu volání zpět (callback method):

/**
 * 修改文章摘要的默认字数长度
 *
 * @param int $length 默认的摘要长度。
 * @return int 修改后的摘要长度。
 */
public function custom_excerpt_length( $length ) {
    // 将摘要长度设置为 30 个字
    return 30;
}

Implementujte stránku s konfigurovatelnými možnostmi pluginu.

Aby byly pluginy flexibilnější, je obvykle potřeba poskytnout uživatelům stránku pro nastavení. WordPress nabízí “API pro nastavení” (Settings API), který umožňuje bezpečné a standardizované vytváření těchto nastavovacích stránek.

Vytvoření správního menu a podstránek

Nejprve musíme do administrace WordPress přidat nový položku v menu. Pro to použijeme… add_options_page Funkce přidává podstránku do hlavního menu “Nastavení”.

init_hooks Přidejte akci do:

add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) );

Definice metody pro přidání menu:

/**
 * 向 WordPress 后台添加插件设置页面
 */
public function add_plugin_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 Slug
        array( $this, 'display_plugin_admin_page' ) // 回调函数
    );
}

Použití API pro nastavení, registraci a zobrazení polí

Dále potřebujeme definovat… display_plugin_admin_page Způsoby renderování obsahu stránek, stejně jako registrace nastavení, polí a kapitol.

Nejprve přidejte další „hook“, který bude sloužit k registraci nastavení:

add_action( 'admin_init', array( $this, 'register_plugin_settings' ) );

Poté implementujte příslušné metody:

/**
 * 使用 WordPress 设置 API 注册设置、字段和章节
 */
public function register_plugin_settings() {
    // 注册一个设置,存储到一个选项 `my_first_plugin_options`
    register_setting(
        'my_first_plugin_options_group', // 选项组名
        'my_first_plugin_options'        // 选项名
    );

// 添加一个设置章节
    add_settings_section(
        'my_first_plugin_main_section',  // 章节 ID
        '主要设置',                      // 章节标题
        array( $this, 'render_section_description' ), // 章节描述回调
        'my-first-plugin'                // 页面 Slug
    );

// 向章节中添加一个文本字段
    add_settings_field(
        'custom_text_field',             // 字段 ID
        '自定义文本',                    // 字段标题
        array( $this, 'render_text_field' ), // 字段渲染回调
        'my-first-plugin',               // 页面 Slug
        'my_first_plugin_main_section'   // 所属章节 ID
    );
}

/**
 * 渲染设置章节的描述文字
 */
public function render_section_description() {
    echo '<p>Zde nakonfigurujete nastavení vašeho prvního pluginu.</p>';
}

/**
 * 渲染自定义文本输入字段
 */
public function render_text_field() {
    $options = get_option( 'my_first_plugin_options' );
    $value = isset( $options['custom_text_field'] ) ? $options['custom_text_field'] : '';
    echo '<input type="text" name="my_first_plugin_options[custom_text_field]" value="' . esc_attr( $value ) . '" class="regular-text" />'; echo '
    echo '<p class="description">Text zde vložený se zobrazí na konci článku.</p>';
}

/**
 * 渲染插件管理页面的主要内容
 */
public function display_plugin_admin_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_fields( 'my_first_plugin_options_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Na závěr potřebujeme upravit to, co jsme udělali dříve. append_custom_text Metoda na načtení textu uloženého uživatelem z možností:

public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'my_first_plugin_options' );
        $custom_text = isset( $options['custom_text_field'] ) &amp;&amp; ! empty( $options['custom_text_field'] ) ?
            '<p><em>'`. esc_html($options['custom_text_field'])`.'</em></p>' :
            '<p><em>Tento text je technicky podpořen “Mým prvním pluginem”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}

Nyní mohou uživatelé na stránce “Nastavení” -> “Moje doplňky” přizpůsobit text, který se zobrazuje na konci článků.

Závěr

Prostřednictvím tohoto průvodce jsme kompletně prošli základním postupem vývoje vlastního WordPress pluginu: od vytvoření základní struktury souborů a bezpečného zabalení kódu až po hluboké pochopení a využití klíčových mechanismů rozšíření WordPressu – akcí a filtrů. Nakonec jsme vytvořili konfigurovatelný plugin, který zahrnoval stránky pro nastavení v administraci. Ukázali jsme také, jak správně používat WordPress API pro vytváření stránek s nastaveními, což zajišťuje bezpečné ukládání dat a konzistentní vzhled rozhraní.

Zvládnutí těchto základních znalostí je solidním krokem směrem k vývoji složitějších pluginů. Následně můžete zkoumat pokročilejší tématy, jako je vytváření vlastních databázových tabulek, tvorba zkratkovacího kódu, přidávání widgetů, psaní REST API endpointů a implementace AJAX interakcí. Pamatujte, že správná organizace kódu, důkladná bezpečnostní kontrola (např. ověřování oprávnění, čištění a escapeování dat) a dodržování standardů kódování WordPressu jsou klíčové pro vývoj kvalitních a udržovatelných pluginů.

Časté dotazy

Jaké předpokládané znalosti jsou potřebné pro vývoj doplňků (plug-inů)?

Potřebujete mít základní znalosti programovacího jazyka PHP, včetně gramatiky, proměnných, funkcí, tříd a objektů. Také by bylo velmi užitečné mít základní povědomí o HTML, CSS a JavaScript, zejména při vytváření pluginů, které zahrnují interakci na straně klienta nebo složité zadní stranové rozhraní. Pochopení základních operací a architektury WordPress je nezbytné.

Jak ladit plugin, který právě vyvíjíte?

Nejprve se ujistěte, že ve vašem… wp-config.php V souboru bude… WP_DEBUG Nastavit na trueTím se aktivuje funkce hlášení chyb v WordPressu. Pro kontrolu chyb v JavaScriptu a síťových požadavků použijte nástroje pro vývojáře ve vašem prohlížeči (kartice „Konzola“ a „Síť“). U kódu v PHP můžete použít… error_log() Funkce zaznamenává proměnné nebo informace do laděcího logu na serveru, nebo využívá speciální laděcí doplňky k sledování průběhu provádění kódu a stavu proměnných.

Lze kód z souboru functions.php daného tématu přímo přesunout do pluginu?

V mnoha případech je to možné, ale je třeba dávat pozor na problémy s referencemi cest a URL adres. Použití tohoto způsobu v tématu je vhodné. get_template_directory_uri() Chcete získat URI adresáře s tematikou – v tomto případě byste v pluginu měli použít jiný způsob přístupu. plugin_dir_url(FILE)Stejně tak funguje funkce pro cestu k adresáři s tematikou. get_template_directory() Mělo by to také být nahrazeno pluginem. plugin_dir_path(FILE)Kromě toho je důležité zajistit, aby všechny funkce v kódu byly správně zabaleny do tříd nebo funkcí s předponami, aby se předešlo konfliktům.

Při vývoji komerčních doplňků je třeba vzít v úvahu několik důležitých aspektů:

Komerční pluginy distribuované v rámci vývojového plánu musí věnovat větší pozornost kvalitě kódu, bezpečnosti a rozšiřitelnosti. Je nutné důkladně připravit jejich internacionalizaci a lokalizaci (použít vhodné nástroje a postupy). __()_e() Funkce a textová pole – je třeba zajistit, aby byly správně implementovány a fungovaly podle požadavků. Kód by měl dodržovat standardy kódování WordPressu. Je také důležité zvážit licenci (obvykle GPL) a následný mechanismus aktualizací. Poskytování jasných a podrobných návodů k použití a kanálů technické podpory pro plugin je zásadní. V ekosystému WordPressu v roce 2026 je zajištění kompatibility pluginu s novými verzemi WordPressu, verzemi PHP, populárními tematikami a dalšími pluginy důležitou součástí jeho průběžné údržby.

Jak přidat podporu více jazyků pro plugin?

WordPress využívá technologii GNU gettext pro internacionalizaci (i18n). Nejprve by měly být všechny řetězce, které je potřeba přeložit, v pluginu obaleny pomocí specifických funkcí. __('文本', 'my-first-plugin') Používá se k vracení překladu._e('文本', 'my-first-plugin') Slouží k výstupu překladu. Poté se pomocí nástrojů, jako je Poedit, prohledá zdrojový kód pluginu a vytvoří se překladatelský soubor. .pot Šablonský soubor. Překladatel vytvořil soubor v požadovaném jazyce na základě tohoto šablónu. .po Soubory a poté je kompilujte do formátu čitelného pro počítače. .mo Soubor. Nakonec je potřeba… load_plugin_textdomain() Funkce je integrována do kódu inicializace pluginu, aby byly překladové soubory načteny ze správné cesty.