Návod k vývoji pluginů pro WordPress: Vytvořte svůj první plugin od nuly.

Čtení za 3 minuty.
2026-03-13
2026-06-03
2,054
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 nastavení prostředí.

Než začnete psát kód, musíte mít vhodné vývojové prostředí. To zahrnuje lokální instalaci WordPressu a editor kódu. Lokální prostředí vám umožní volně testovat a ladit kód, aniž by to ovlivnilo webové stránky online. Mezi běžně používané nástroje pro lokální vývoj patří Local by Flywheel, XAMPP nebo MAMP.

Potřebujete vymyslet jedinečný název pro svůj plugin. Tento název bude použit jako název hlavního adresáře pluginu i název hlavního souboru. Například, pokud se váš plugin jmenuje “Hello World”, pak může být hlavní soubor pluginu nazýván… hello-world.phpUjistěte se, že název a popis vašeho pluginu jsou jedinečné v adresáři WordPress pluginů. Tím zabráníte možným konfliktům s jinými pluginy.

Kromě toho je velmi důležité být obeznámen s oficiálními vývojářskými manuály a referencemi k kódu WordPressu. Porozumění základním konceptům WordPressu, jako jsou akční háčky (Action Hooks), filtrovací háčky (Filter Hooks), zkratky kódu (Shortcodes) a API pro nastavení (Settings API), vám poskytne solidní základ pro vaši práci při vývoji.

Doporučujeme k přečtení. Kompletní průvodce vývojem pluginů pro WordPress: vytvořte profesionální PHP plugin od nuly.

Vytvořte první soubor plug-inu.

Jádrem pluginu je jeden nebo více PHP souborů. V nejjednodušším případě může plugin sestávat pouze z jednoho PHP souboru. Pro vytvoření funkčního pluginu je nutné do začátku hlavního pluginového souboru přidat standardní poznámky s informacemi o pluginu. Tyto poznámky poskytnou WordPress všechen potřebný metadatabazový obsah o vašem pluginu, jako je název, popis, verze, autor atd.

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.

Napsat informace o hlavičce pluginu

WordPress rozpoznává a zobrazuje informace o pluginech tak, že čte poznámky v určitém formátu umístěné na začátku souboru. Níže je příklad nejzákladnějšího obsahu hlavičky pluginu:

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习和演示的简单 WordPress 插件。
 * Version:           1.0.0
 * Requires at least: 5.2
 * Requires PHP:      7.2
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Uložte tento kód do nového PHP souboru, například „new_file.php“. my-first-plugin.phpPoté tento soubor umístěte do adresáře vaší lokální instalace WordPress. wp-content/plugins V té složce. Nyní, když se přihlásíte do administrace WordPressu a přejdete na stránku “Příslušenství” (Plugins), měli byste vidět v seznamu nový plugin s názvem “Můj první plugin” a mohli byste ho aktivovat. V tuto chvíli nemá žádné funkce.

Přidání základních funkcí pro plugin

Po aktivaci tohoto pluginu mu přidáme jednoduchou funkci: automatické vložení vlastního textu na konci obsahu článku. K tomu budou potřeba filtrovací háčky (filter hooks) v WordPressu. the_content

Můžete přidat následující kód pod informace o hlavě pluginu, které jste právě uvedli:

Doporučujeme k přečtení. Od nuly: Podrobný průvodce celým procesem vývoje pluginů pro WordPress

/**
 * 在文章内容末尾添加自定义文本
 *
 * @param string $content 当前文章内容。
 * @return string 修改后的文章内容。
 */
function mfp_add_footer_text( $content ) {
    // 仅针对主循环中的单个文章页面
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Děkujeme, že jste si přečetli tento článek, představovaný projektem “Můj první plugin”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
// 将自定义函数挂载到 `the_content` 过滤器上
add_filter( 'the_content', 'mfp_add_footer_text' );

Tento kód definuje něco, co se nazývá… mfp_add_footer_text Funkce, která přijímá obsah článku $content Jako parametr. Uvnitř funkce se nejprve použijí podmínkové značky (…)is_single(), in_the_loop(), is_main_query()Tím se zajistí, že úpravy probíhají pouze v hlavním cyklu konkrétní stránky článku a neovlivní jiné stránky, jako je úvodní strana nebo stránky s archivy. Poté je vytvořen vlastní text v HTML formátu a přidán za původní obsah článku. Nakonec se to provede pomocí… add_filter Tato funkce “namontuje” tuto vlastní funkci do systému WordPress. the_content Na filtru.

Po uložení souboru obnovte stránku článku na frontendu a uvidíte přidaný text na konci hlavního textu článku.

Vývoj pokročilých funkcí: Vytvoření správního menu a stránek s možnostmi

Plug-in s kompletní funkcionalitou obvykle vyžaduje interakci s administrátorem, což se obvykle dosahuje přidáním stránek pro nastavení na straně serveru (backendu). WordPress poskytuje bohaté API pro vytváření správních menu a stránek s nastaveními.

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řidat položku menu pro pluginy v pozadí

Vytvoříme pro plugin samostatnou stránku s administračním menu, která bude sloužit k konfiguraci některých možností. K tomu bude potřeba použít… add_action Klíčové slova: háčky, admin_menu Akce.

V hlavním souboru svého pluginu pokračujte v přidávání následujícího kódu:

/**
 * 在 WordPress 后台管理菜单中添加一个新的顶级菜单项
 */
function mfp_register_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 slug
        'mfp_render_settings_page', // 渲染页面的回调函数
        'dashicons-admin-plugins', // 图标(可选)
        80                      // 菜单位置
    );
}
add_action( 'admin_menu', 'mfp_register_admin_menu' );

add_menu_page Funkce slouží k registraci nového vrcholového menu.manage_options Jedná se o identifikátor oprávnění, který znamená, že tento menu mohou vidět pouze uživatelé s oprávněním “Správní možnosti” (obvykle administrátoři).mfp_render_settings_page Jedná se o název funkce, kterou budeme následně definovat a která bude sloužit k výstupu HTML obsahu stránky s nastaveními.

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

Obsah stránky pro nastavení konfigurace

Nyní potřebujeme definovat ty výše zmíněné callback funkce. mfp_render_settings_page Zobrazíme jednoduchou stránku pro nastavení.

/**
 * 渲染插件设置页面的内容
 */
function mfp_render_settings_page() {
    ?&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
            // 输出设置字段、安全 nonce 字段等
            settings_fields( 'mfp_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Tato funkce vypíše základní strukturu správní stránky v WordPressu, která obsahuje nadpis a formulář. Používá dvě klíčové funkce z API pro nastavení WordPressu:settings_fieldsdo_settings_sectionsAby to fungovalo, potřebujeme také registrovat nastavení, sekce a pole.

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.

Použijte API pro nastavení a registraci možností.

Nastavení API v WordPressu poskytuje bezpečný a standardizovaný způsob pro registraci, ukládání a ověřování možností formulářů. Pokračujeme přidáním následujícího kódu pro registraci jednoduchého textového pole.

/**
 * 初始化插件的设置
 */
function mfp_settings_init() {
    // 注册一个新的设置项 `mfp_options` 到数据库
    register_setting( 'mfp_settings_group', 'mfp_options' );

// 在页面内添加一个新的节
    add_settings_section(
        'mfp_section_basic',
        '基础设置',
        'mfp_section_basic_callback',
        'my-first-plugin'
    );

// 向节中添加一个字段
    add_settings_field(
        'mfp_field_custom_text',
        '自定义页脚文本',
        'mfp_field_custom_text_callback',
        'my-first-plugin',
        'mfp_section_basic',
        array( 'label_for' =&gt; 'mfp_field_custom_text' )
    );
}
add_action( 'admin_init', 'mfp_settings_init' );

/**
 * 节描述的回调函数(可以为空)
 */
function mfp_section_basic_callback() {
    echo '<p>Zde nakonfigurujete základní možnosti pluginu.</p>';
}

/**
 * 字段 `mfp_field_custom_text` 的回调函数,用于输出 HTML 输入框
 */
function mfp_field_custom_text_callback() {
    // 从数据库获取现有值
    $options = get_option( 'mfp_options' );
    $value = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
    ?&gt;
    <input type="text"
           id="mfp_field_custom_text"
           name="mfp_options[custom_text]"
           value="<?php echo esc_attr( $value ); ?>"
           class="regular-text" />
    <p class="description">Tento text bude zobrazen na konci článku.</p>
    <br />&lt;?php
}

Nyní potřebujeme upravit to, co jsme udělali dříve. mfp_add_footer_text Funkci nastavte tak, aby používala nově vytvořené hodnoty možností, místo pevně zakódovaného textu.

function mfp_add_footer_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'mfp_options' );
        $custom_text = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
        if ( ! empty( $custom_text ) ) {
            $content .= '<p><em>'`. esc_html($custom_text)`.'</em></p>';
        }
    }
    return $content;
}

Nyní má váš plugin kompletní stránku pro nastavení v administraci. Správce může najít tuto stránku v menu “Moje pluginy”, zadat vlastní text pro podtitul stránky a poté uložit změny. Tento text se následně dynamicky zobrazí na konci článků na webové stránce.

Optimalizace pluginů a bezpečnostní postupy

Při vývoji doplňků je dodržování osvědčených postupů (best practices) zásadní pro bezpečnost, výkon a udržovatelnost. Níže jsou uvedeny některé z klíčových zásad.

Ujistěte se, že je kód bezpečný.

Všechna data přijatá z front-endu nebo správního rozhraní musí být před výstupem do prohlížeče nebo uložením do databáze ověřena, očištěna a zakódována („escaped“). Tím se zabrání bezpečnostním chybám, jako je cross-site scripting (XSS) a SQL injection.

  • Použijte funkce, jako např. esc_html(), esc_attr(), esc_url(), wp_kses_post() Použijte escape značky pro dynamický obsah.
  • Očistěte vstup: Použijte funkce, jako např. sanitize_text_field(), sanitize_email(), intval() Zpracovat data z formulářů odeslaných uživateli.
  • Ověření oprávnění: Použijte to v funkci zpětné volání administrátora. current_user_can() Provedete druhou ověřku oprávnění. U AJAX nebo REST API endpointů, které zahrnují úpravy dat, je nutné použít nonce (číselný token) k ověření.

Dodržovat standardy kódování WordPress

Použití kódovacích standardů WordPress zajišťuje, že váš kód bude mít stejný styl jako kód samotného WordPressu, což zvyšuje čitelnost a usnadňuje spolupráci s ostatními vývojáři. To zahrnuje použití správného odsazení, stylu závorek, pravidel pojmenovávání (funkce a proměnné se píšou malými písmeny spojenými podtržkou) a podobně. Pro automatickou kontrolu kódu můžete využít nástroj PHP CodeSniffer v kombinaci se standardními pravidly WordPressu.

Implementace podpory internacionalizace

Přidání podpory internacionalizace k vašemu pluginu hned od začátku umožní uživatelům po celém světě snadno jej přeložit do svého vlastního jazyka. To se dosahuje především následujícími kroky:
1. Správně nastavte poznámky v hlavě pluginu. Text DomainDomain Path
2. Použijte funkce pro překlad v WordPressu kolem všech řetězců, které je třeba přeložit. (), _e(), esc_html() Atd.
3. Použijte nástroje, jako je Poedit, k vytvoření požadovaného obsahu. .pot Šablonový soubor, který mají překladatelé použít k vytvoření překladu. .po.mo Překládání dokumentů.

Například internacionalizace popisového textu na stránce nastavení:

function mfp_section_basic_callback() {
    echo '<p>' . esc_html__( '在这里配置插件的基础选项。', 'my-first-plugin' ) . '</p>';
}

Závěr

Tento článek vás od začátku provede celým procesem vytvoření základní, ale funkčně kompletní WordPress pluginu. Zabývali jsme se přípravou prostředí, vytvářením souborů pluginu, psaním hlavičkových informací pluginu, používáním akčních a filtrovacích hooků k přidávání obsahu do článků, až po vytváření složitých administrativních rozhraní pomocí WordPress API. Na závěr jsme také probrali zásadní aspekty bezpečnosti, kódovacích standardů a internacionalizace při vývoji pluginů.

Díky této praxi byste měli již ovládnout základní postupy a nástroje pro vývoj pluginů pro WordPress. Následujícím krokem může být vývoj složitějších funkcí, např. vytváření vlastních typů článků, úprava databázových tabulek, vylepšení interakcí pomocí jQuery, nebo odeslání vašeho pluginu do oficiálního repozitáře pluginů WordPress. Nezapomeňte, že neustálé učení a studium základního kódu je nejlepším způsobem, jak zlepšit své vývojářské dovednosti.

Časté dotazy

Jak ladit můj WordPress plugin?

Prvním krokem je povolení režimu ladění (debugging mode) v WordPressu. Ve vašem… wp-config.php V dokumentu budou uvedeny následující informace: WP_DEBUG Konstanta je nastavena na trueTo zobrazí přímo na stránce chyby, varování a upozornění PHP.

Zároveň je možné použít. error_log() Funkce zapisuje vlastní laděcí informace do chybového logu serveru, nebo lze použít vývojářské nástroje prohlížeče (konzola a kartice „Síť“) k ladění JavaScriptových a AJAX požadavků. Pro složitější logiku je výhodné použít profesionální laděcí nástroje, jako je např. Xdebug.

Bude můj plugin konflikovat s tématem nebo s jinými pluginy?

Je to možné, zejména při práci s stejnými „hooky“ (funkcemi), používání obecných názvů globálních proměnných nebo tříd. Abychom minimalizovali konflikty, je důležité přidávat jedinečné předpony ke všem názvům funkcí, tříd, proměnných a možností. Například nepoužívejte… add_footer_textMísto toho se používá něco podobného… myplugin_add_footer_text Název.

Před úpravou globálních dat (např. proměnných používaných v dotazech) provádějte důkladnou kontrolu a nastavte vhodné podmínky. Před vydáním svého doplňku ho co nejvíce otestujte v různých prostředích a s různými kombinacemi témat.

Které techniky bych měl naučit, abych mohl vytvářet pokročilé pluginy?

Kromě solidních základů v PHP potřebujete také hluboké pochopení následujících aspektů:
– JavaScript: Používá se pro interakci na straně klienta a vývoj vlastních funkcí v WordPressu.
– jQuery: I když se WordPress přechází na moderní JS frameworky, jQuery je stále široce používán.
– REST API: Slouží k vytváření dekapsulovaných front-end aplikací nebo k interakci s externími službami.
– Znalosti databází: Pochopení struktury databáze WordPressu a znalost způsobů bezpečného provádění vlastních dotazů nebo vytváření nových tabulek.
– Composer: Nástroj určený k správě závislostí v PHP aplikacích.
Nástroje pro vývoj: Např. Webpack, který slouží k správě kompilace moderního JavaScriptu a SASS.

Jak zveřejnit svůj plugin v oficiálním adresáři WordPressu?

Nejprve se ujistěte, že váš plugin plně odpovídá oficiálním pokynům pro vývoj pluginů a bezpečnostním osvědčeným postupům. Budete potřebovat účet na WordPress.org. Pod tímto účtem odešlete komprimovaný balíček svého pluginu ke zkoumání. Proces zkoumání zahrnuje kontrolu kvality kódu, bezpečnosti a licenčních podmínek (licence musí být kompatibilní s licencí GPL).

Pokud váš plugin projde přezkumem, bude přidán do SVN repozitáře, kde budete moci svůj plugin aktualizovat a udržovat pomocí SVN. Po jeho vydání budou uživatelé moci váš plugin přímo vyhledat, nainstalovat a aktualizovat v svém WordPress administrátorském rozhraní.