Postupně si vytvořte svůj první WordPress plugin: od základů až po praktický vývoj

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

Základy vývoje pluginů pro WordPress a příprava prostředí

WordPress plugin je v podstatě soubor skupiny PHP souborů, které rozšiřují základní funkce WordPressu prostřednictvím API poskytovaného tímto systémem. Plugin může být velmi jednoduchý – obsahuje pouze krátký kód – nebo může být složitý a sloužit k vytvoření kompletního správního systému. Před začátkem kódování je velmi důležité pochopit jeho základní strukturu. Každý plugin musí mít hlavní soubor, který obvykle nese název tohoto pluginu. my-first-plugin.phpPoznámky umístěné na začátku tohoto souboru jsou klíčové pro to, aby WordPress rozpoznal daný plugin.

Vývojové prostředí je základem pro efektivní práci. Je nutné si na lokálním počítači vytvořit testovací prostředí, které bude co nejvíce odpovídat online prostředí. Doporučujeme použít balíčky pro integraci lokálních serverů, jako jsou XAMPP, MAMP nebo Local by Flywheel. Zároveň se ujistěte, že váš editor kódu nebo integrované vývojové prostředí (IDE) podporuje výrazové zvýraznění a ladění kódu v PHP, např. VS Code, PhpStorm nebo Sublime Text. Aktivujte funkce potřebné pro správu WordPressu.WP_DEBUGRežimy jsou velmi důležité pro odhalování chyb během vývojové fáze. Můžete je využít na webových stránkách…wp-config.phpVe souboru je to definováno prostřednictvím určitých pravidel nebo nastavení.define('WP_DEBUG', true);Přijďte ho aktivovat.

Vytvořte svůj první soubor plug-inu.

Začněme vytvořením nejjednoduššího pluginu, který zobrazí v administračním panelu webové stránky vlastní upozornění.

Doporučujeme k přečtení. Průvodce vývojem WordPress pluginů: Vytvořte si vlastní funkce od nuly

Napsání hlavního souboru pluginu a příslušných poznámkových hlaviček

Nejprve, ve složce s instalací WordPressu:wp-content/pluginsV této složce vytvořte novou složku a pojmenujte ji…my-first-pluginV této složce vytvořte PHP soubor se stejným názvem.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.

Otevřete tento soubor a zadejte následující standardní záhlaví pro popisy pluginů. Tyto informace se zobrazí na stránce správy pluginů v administraci WordPressu.

<?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 přejděte do administrace WordPress na stránku “Příslušenství” (Plugins) a měli byste vidět, že “Můj první plugin” se objevil v seznamu příslušenství. Aktivujte ho. Ačkoli plugin zatím neprovádí žádné funkce, byl úspěšně načten WordPressem.

Implementace základní funkce notifikací na backendu

Nyní přidáme první funkci pro tento plugin: zobrazíme vítací zprávu v horní části administrativního panelu. Pro to použijeme funkce WordPressu.admin_notices„Hook.“ Do hlavního souboru pluginu, který jsme právě prohlíželi, přidejte následující kód pod značkou komentáře:

// 在管理后台显示自定义通知
function mfp_show_admin_notice() {
    ?&gt;
    <div class="notice notice-success is-dismissible">
        <p><?php _e( '欢迎使用“我的第一个插件”!', 'my-first-plugin' ); ?></p>
    </div>
    &lt;?php
}
add_action( &#039;admin_notices&#039;, &#039;mfp_show_admin_notice&#039; );

Vysvětlení kódu: Vytvořili jsme něco, co se nazývá…mfp_show_admin_noticeTato funkce vypíše kus HTML kódu pro notifikace v souladu se stylem WordPress administrace._e()Funkce jsou vytvořeny za účelem podpory budoucí internacionalizace (i18n). Nakonec, prostřednictvím…add_action()Funkce nám umožňuje připojit naše vlastní funkce k systému WordPress.admin_noticesNa tomto “ukazučníku”. Po uložení souboru aktualizujte stránku WordPressu v administraci a uvidíte zelené upozornění o úspěšném provedení operace.

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

Prohloubené vývojové práce týkající se základních funkcí pluginů

Po zvládnutí základní struktury můžeme vyvíjet užitečnější funkce. Častým požadavkem je automatické přidání vlastního textu na konci obsahu článku.

Upravení obsahu článku pomocí filtrů

WordPress poskytuje velké množství “filtrů” (Filters), které umožňují upravovat různá data. Abychom přidali text za obsah článku, použijeme…the_contentFiltry. Přidejte následující novou funkci do hlavního souboru pluginu:

// 在文章内容末尾添加自定义文本
function mfp_append_to_content( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<div class="my-plugin-footer"><p>Děkujeme, že jste si to přečetli! Tento článek vám přináší “Můj první plugin”.</p></div>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_append_to_content' );

Tato funkce přijímá původní…$contentProstřednictvím podmínekového ověřování zajistíme, že náš vlastní HTML text bude přidán pouze na stránce konkrétního článku a pouze v rámci hlavního dotazu. Nakonec je upravený obsah vrácen zpět. Tento přístup je neinvazivní a nemění původní obsah v databázi.

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.

Vytvořte jednoduchou stránku pro správu nastavení.

Aby uživatelé mohli sami definovat text, který se má přidat na konec článku, potřebujeme pro tento plugin vytvořit stránku se nastaveními. To zahrnuje několik kroků: registraci menu, vytvoření funkce na zpracování událostí na této stránce a zpracování dat z formuláře.

Nejprve použijteadmin_menuK tomuto „hooku“ by měla být přidána stránka s podmenüem.

// 添加插件设置菜单到后台
function mfp_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',    // 权限要求
        'my-first-plugin',   // 菜单slug
        'mfp_options_page_html' // 显示页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

Následně definujte funkci volání zpět (callback function).mfp_options_page_htmlPřinášíme HTML formulář určený k načtení stránky se nastaveními. Zároveň potřebujeme využít WordPress API k bezpečné registraci, ukládání a načítání možností (optionů). Pro stručnost je zde uvedena zjednodušená verze implementace:

Doporučujeme k přečtení. Kompletní průvodce vývojem pluginů pro WordPress: od začátků až po vytváření profesionálních rozšíření.

// 设置页面的HTML内容
function mfp_options_page_html() {
    // 检查用户权限
    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
            // 输出设置字段、非ce等安全字段
            settings_fields( 'mfp_options_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <?php
}

// 初始化插件设置
function mfp_settings_init() {
    // 注册一个设置
    register_setting( 'mfp_options_group', 'mfp_footer_text' );

// 添加一个设置区域
    add_settings_section(
        'mfp_section',
        '自定义文本设置',
        null,
        'my-first-plugin'
    );

// 向区域中添加字段
    add_settings_field(
        'mfp_field_footer',
        '文章页脚文本',
        'mfp_field_footer_html',
        'my-first-plugin',
        'mfp_section'
    );
}
add_action( 'admin_init', 'mfp_settings_init' );

// 渲染文本输入字段
function mfp_field_footer_html() {
    $option = get_option( 'mfp_footer_text', '感谢阅读!本文由“我的第一个插件”为您呈现。' );
    ?>
    <input type='text' name='mfp_footer_text' value='<?php echo esc_attr( $option ); ?>' class='regular-text'>
    <p class="description">Obsah zde vložený bude zobrazen na konci každého článku.</p>
    <br />&lt;?php
}

Nakonec, upravte to, co bylo předtím.mfp_append_to_contentFunkce, která umožňuje přístup k datům z databázemfp_footer_textText se čte ze souboru, nikoli z pevně zakódovaného textu.

Bezpečnost pluginů, jejich optimalizace a příprava k vydání

V poslední fázi vývoje je třeba věnovat pozornost bezpečnosti, kvalitě kódu a procesu nasazení, aby bylo zajištěno, že plugin je robustní a použitelný.

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.

Dodržovat osvědčené bezpečnostní postupy

Veškerý uživatelský vstup musí být před výstupem do prohlížeče nebo uložením do databáze označen speciálními značkami („escape“) nebo ověřen. Při výstupu se tedy musí postupovat podle příslušných pravidel.esc_html()esc_attr()esc_url()Funkce jako „wait“. Při zpracovávání odeslání formulářů nebo AJAX požadavků se používají.wp_verify_nonce()check_admin_referer()Slouží k ověření platnosti požadavku a zabránění útokům typu Cross-Site Request Forgery (CSRF). Nikdy nesmíte nic přímo považovat za důvěryhodné.$_GET$_POST$_REQUESTData z tohoto textu.

Implementace podpory internacionalizace

Aby bylo možné používat tento plugin uživatelům po celém světě, je nutné internacionalizovat všechny textové stránky v kódu určené pro uživatele. To jsme již provedli v předchozích příkladech._e()Funkce slouží k výstupu přeloženého textu. Kromě toho je nutné to deklarovat v hlavičce poznámky k pluginu.Text DomainDomain Path
Při inicializaci pluginu (například prostřednictvím…)plugins_loadedHáček), použijteload_plugin_textdomain()Funkce pro načtení jazykových souborů:

function mfp_load_textdomain() {
    load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mfp_load_textdomain' );

Poté můžete použít nástroje, jako je Poedit, k výběru řetězců z zdrojového kódu pluginů.__()_e()Generovat řetězce zabalené do funkcí typu „wait“ (nebo podobných funkcí)..potŠablonový soubor, který mají překladatelé použít k vytvoření překladu..po.moDokumenty.

Organizace kódu a ohledy na výkon

S rostoucími funkcemi pluginů by se neměl veškerý kód shromažďovat do hlavního souboru. Správným postupem je rozdělit kód do různých modulů podle jejich funkcí..phpVe souboru jsou tyto prvky obsaženy a hlavní soubor je pak selektivně používá k jejich zahrnutí. Například lze vytvořit…includes/admin/Katalog obsahuje kód související s backendem.includes/public/Ukládá kód související s frontendem.includes/class-*.phpUkládá definice tříd.
Pro zátěžové operace zvažte použití transitorického cache systému WordPressu (Transients API) k ukládání výsledků časově náročných dotazů, nebo využijte plánované úlohy (Cron API) k zpracování neokamžitých úkolů na pozadí. Ujistěte se, že při deaktivaci pluginu budou všechny funkce správně odstraněny pomocí registrovaných hooků na odinstalaci.register_uninstall_hook()Uklidněte data a možnosti, které byly vytvořeny, aby byl web udržován v pořádku.

Závěr

Díky tomuto tutoriálu jsme dokončili proces vytvoření plně funkčního WordPress pluginu od nuly. Začali jsme porozuměním základní struktuře pluginu a nastavením vývojového prostředí, poté jsme vytvořili hlavní soubor obsahující standardní poznámky. Následně jsme…admin_noticesthe_contentTyto dvě klíčové „hooky“ umožňují realizaci funkcí pro zasílání notifikací na pozadí a výpis textu v podpatku článků. Za účelem zvýšení užitečnosti tohoto pluginu jsme dále integrovali API pro nastavení WordPress a vytvořili správní stránku, která umožňuje uživatelům personalizovat text. Nakonec jsme se zabývali důležitými aspekty vývoje pluginů, jako jsou bezpečnostní postupy, podpora internacionalizace a optimalizace organizace kódu. Tento proces jasně ukazuje základní paradigma vývoje WordPress pluginů: využití bohaté škály akčních „hooků“ a filtrů k přidávání funkcí, dodržování API specifikací při vytváření uživatelského rozhraní a neustálé upřednostňování bezpečnosti a udržovatelnosti kódu. Po zvládnutí těchto základů budete mít možnost zkoumat svět složitějších pluginů.

Časté dotazy

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

Potřebujete mít solidní základy programování v PHP, protože kód pluginů je většinou napsán v PHP. Zároveň je nutné mít základní znalosti HTML, CSS a JavaScriptu, abyste mohli pracovat s výstupním zobrazením a interakcemi na stránkách. Důležité je také být obeznámeni se základními koncepty WordPressu, jako jsou tematika (themes), typy článků, klasifikace (categories) a zejména s jeho systémem hooků (Hooks), včetně akcí (actions) a filtrů (filters).

###
Které soubory musí nejzákladnější WordPress plugin obsahovat?

V nejzákladnějším případě může plugin obsahovat pouze jediný soubor v formátu PHP. Tento soubor však musí na začátku obsahovat příslušné poznámky („plugin headers“) odpovídající standardům WordPressu, jak je ukázáno v našem příkladu.Plugin NameDescriptionMezi další pole patří také toto. To je jediný důvod, proč WordPress tento plugin rozpozná a zobrazí ho v seznamu správy pluginů.

###
Jak bych měl pojmenovávat funkce a proměnné svého pluginu?

Aby se předešlo konfliktům s kódem jádra WordPressu, temát nebo jiných pluginů, měly by všechny vlastní funkce, třídy, proměnné a konstanty používat jedinečné předpony. Obvykle se doporučuje používat předpony související se zkratkami nebo názvy pluginů. Takto je to i v našem příkladu.mfp_(Reprezentující „My First Plugin“.) Názvy tříd by také měly dodržovat toto pravidlo a pokud možno by měly být významné a plné názvy.

###
Budou databázové tabulky nebo nastavení vytvořené v pluginu smazány po odstranění tohoto pluginu?

Ve výchozím nastavení ne. Pokud to uděláte prostřednictvím…add_option()update_option()Vytvořené možnosti nebo vlastně definované datové tabulky zůstanou v databázi i poté, co uživatel odstraní soubory pluginu prostřednictvím administrace WordPressu. Pro zajištění čistého zážitku při odinstalování byste měli použít…register_uninstall_hook()Funkce slouží k registraci callback funkce určené k provádění úklidu – v této funkci jsou odstraněny všechny volby související s pluginy, databázové tabulky a dočasné cache.

###
Jak zajistit, aby můj plugin byl kompatibilní s více verzemi WordPressu?

V kódu se snažte vyhnout používání příliš nových verzí PHP nebo funkcí specifických pro WordPress. Před použitím jakékoli funkce, třídy nebo hooku si prosím prostudujte jejich oficiální dokumentaci a zjistěte, ve které verzi WordPress byly tyto funkce zavedeny. To můžete udělat pomocí poznámek v hlavičce hlavního souboru vašeho pluginu.Requires at least:Udává se minimální verze WordPressu, která je podporována pro dané pole. V kódu lze toto použít v kombinaci s podmínkovými výrazy.function_exists()class_exists()Proveďte kontrolu za účelem poskytnutí náhradního řešení nebo přívětivého upozornění.