Ultimátní průvodce vývojem WordPress pluginů: Postavte si svůj první plugin od nuly

Čtení za 3 minuty.
2026-03-15
2026-06-04
2,384
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, potřebujete vhodné vývojové prostředí. To zahrnuje lokální instalaci WordPressu, editor kódu a základní znalosti PHP. Doporučujeme použít nástroje jako XAMPP, MAMP nebo Local by Flywheel k rychlému nastavení lokálního prostředí pro vývoj WordPressu. Ujistěte se, že vaše verze PHP odpovídá oficiálním požadavkům WordPressu – obvykle je to PHP 7.4 nebo vyšší.

Plugin je v podstatě jeden nebo více PHP souborů, které jsou umístěny v prostředí WordPressu.wp-content/pluginsV adresáři. Každý plugin musí mít jedinečné jméno a na začátku svého hlavního souboru musí být obsaženy standardní poznámky s informacemi o pluginu – to je základ pro rozpoznávání pluginů v WordPressu.

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

Nejprve,wp-content/pluginsV 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.phpV tomto souboru potřebujete zapsat informace o hlavičce pluginu.

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

<?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
 */

Po uložení souboru přejděte do administrace WordPress na stránku “Příslušenství” (Plugins). Měli byste vidět, že “Můj první plugin” se objevil v seznamu příslušenství. Aktivujte ho – i když zatím nemá žádné funkce, to znamená, že váš plugin byl úspěšně načten WordPressem.

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.

Porozumění základním mechanismům WordPressu: Hooky a filtry

Silná rozšiřitelnost WordPressu pochází z jeho událostem řízené architektury, jejímž jádrem jsou “háčky” (Hooks). Háčky se dělí na dvě kategorie: akce (Actions) a filtry (Filters). Porozumění jejich fungování je klíčové pro efektivní vývoj doplňků (plug-inů).

Akční háčky vám umožňují vložit a spustit vlastní kód v určitých okamžicích – např. při zveřejnění článku nebo načtení stránky. Můžete tím například odeslat e-mail po zveřejnění článku.add_action()Tato funkce nakonfiguruje váš vlastní funkci tak, aby byla spuštěna při určeném události („akčním háčku“).

Filtrovací hooky vám umožňují upravovat data. Než jsou data použita (např. uložena do databáze nebo zobrazena v prohlížeči), můžete je zachytit a změnit. Například můžete upravit nadpis článku nebo obsah komentářů. K tomu můžete využít…add_filter()Funkce slouží k aplikaci filtrů.

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

Předpokládejme, že chceme do podkladu stránek administrace našeho webu přidat řádek vlastního textu. WordPress nabízí nástroj s názvem…admin_footerAkční hooky. Můžeme přidat následující kód do hlavního souboru pluginu:

Doporučujeme k přečtení. Návod pro začátečníky k vývoji pluginů pro WordPress: Vytvořte si svůj první funkční plugin od nuly.

// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
    echo '<p>Děkujeme, že používáte “Můj první plugin”!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

Uložte soubor a obnovte stránku administrace WordPressu. Posuňte se dolů na spodní část stránky (na „footer“) a měli byste vidět přidaný text. To je základní použití akčních háčků („action hooks“): spouštění kódu na určitém místě stránky.

Upravit obsah pomocí filtrů

Teď se pokusíme upravit názvy všech článků tak, abychom na konci každého názvu jednotně přidali symbol ochranné známky. Můžeme k tomu použít…the_titleFiltr.

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Tento kód zkontroluje, zda se aktuální prostředí nachází v hlavním cyklu zpracování článků na frontendu. Pokud ano, přidá po nadpisu symbol “™”.10Jde o prioritu – čím menší je číslo, tím dříve se operace provádí.2To znamená, že naše funkce přijímá dva parametry (původní).$title$post_id)。

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ření funkcí pro pluginy: Vytvoření správního menu a nastavovacích stránek

Zralý plugin obvykle musí poskytovat možnosti konfigurace v administraci WordPressu. To zahrnuje vytvoření speciální stránky správního menu pro daný plugin. WordPress nabízí bohatou sadu API funkcí, které umožňují realizaci tohoto účelu.add_menu_page()add_options_page()

Přidat hlavní správní menu

Přidáme pro plugin samostatný hlavní menu. To se obvykle dělá…admin_menuAkce byla dokončena pomocí „akčních háčků“ (action hooks). Vytvoříme funkci, která bude sloužit k definování menu a stránek.

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

Dále potřebujeme definovat funkci volání zpět (callback function).myplugin_display_settings_page()Zde je HTML obsah stránky pro nastavení renderování.

Doporučujeme k přečtení. Vývoj pluginů pro WordPress od začátku až po pokročilou úroveň: kompletní návod k vytváření vlastních funkcí.

// 定义设置页面的显示内容
function myplugin_display_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Nastavení mého pluginu</h1>
        <form method="post" action="/cs/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Registrovací nastavení, pole a oddělení (Registration settings, fields, and partitions)

Pro bezpečné zpracování dat z formulářů potřebujeme využít API pro nastavení WordPressu. To zahrnuje registraci nastavení, přidávání sekci a polí pro nastavení.

// 初始化插件设置
function myplugin_settings_init() {
    // 1. 注册一个设置(存储在wp_options表中)
    register_setting(
        ‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
        ‘myplugin_options’ // 存储在数据库中的选项名
    );

// 2. 添加一个设置分区
    add_settings_section(
        ‘myplugin_section_basic’, // 分区ID
        ‘基础设置’, // 分区标题
        ‘myplugin_section_basic_callback’, // 分区介绍的回调函数
        ‘myplugin-settings-page’ // 所属页面的slug
    );

// 3. 为分区添加一个字段
    add_settings_field(
        ‘myplugin_field_message’, // 字段ID
        ‘欢迎信息’, // 字段标签
        ‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
        ‘myplugin-settings-page’, // 所属页面的slug
        ‘myplugin_section_basic’ // 所属分区的ID
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// 分区介绍的回调函数
function myplugin_section_basic_callback() {
    echo ‘<p>Konfigurace základních informací o pluginu.</p>’;
}

// 字段渲染的回调函数
function myplugin_field_message_callback() {
    // 从数据库获取现有值
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
    // 输出输入框
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

Nyní má váš plugin kompletní stránku pro správu nastavení, která splňuje standardy WordPress, a umožňuje bezpečné ukládání a čtení konfiguračních možností.

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.

Best Practices for Plugin Internationalization and Security

Aby byl váš plugin použitelný uživateli po celém světě, je internacionalizace (i18n) nezbytným krokem. Zároveň je dodržování bezpečnostních norem základem pro ochranu vás i webových stránek vašich uživatelů před útoky.

Implementace internacionalizace textu

WordPress je používán__()_e()Pro realizaci překladu můžete využít funkce typu „translate“. Nejprve se ujistěte, že jste správně nastavili potřebné parametry v části hlavy pluginu.Text Domain(Například:my-first-pluginPoté všechny řetězce určené pro uživatele obalte funkcí pro překlad.

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>Děkujeme, že používáte “Můj první plugin”!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

Dále budete potřebovat použít nástroje, jako je Poedit, k vytvoření….pot(Template) Soubor, umístěný v pluginu.languagesV složce. Překladatel může vytvořit odpovídající strukturu..poA po kompilaci.moSoubor. Nakonec, použijte ho při inicializaci pluginu.load_plugin_textdomain()Překlad textu „Funkce načítání“: „Function loading“.

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

Dodržujte pravidla bezpečného kódování.

Bezpečnost je nesmírně důležitá. Za prvé, nikdy nesmíte důvěřovat datům, která zadají uživatelé. Všechna data pocházející od uživatelů nebo z externích zdrojů…$_GET$_POST$_COOKIEVšechny tyto prvky musí být ověřeny, očištěny a přeformátovány (např. pomocí escape funkcí).

  • Při výstupu dat do HTML, JavaScriptu nebo URL je třeba použít příslušné funkce pro escape (uzavření speciálních znaků).
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘ . esc_html( $text ) . ‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/cs/“‘/" . esc_url( $url ) ‘“>odkaz (na webové stránce)</a>’;
  • Ověření vstupu: Zkontrolujte, zda data odpovídají očekávanému formátu (např. zda je jedná o e-mailovou adresu, číslo atd.).
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • Kontrola oprávnění: Před provedením správních operací se zkontroluje, zda má aktuální uživatel odpovídající oprávnění.
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • Validace Nonce: U operací, které způsobují změnu stavu (např. odeslání formuláře, AJAX požadavky), se používá Nonce (jednorázové číslo) k zabránění útokům typu Cross-Site Request Forgery (CSRF).
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

Závěr

Díky této příručce jste dokončili celý proces od vytvoření základních souborů pluginů, pochopení a využití systému hooků v jádře WordPressu, vytvoření administrativního rozhraní, až po implementaci funkcí internacionalizace a základních bezpečnostních postupů. Nyní ovládáte klíčové dovednosti potřebné k vývoji plně funkčních, strukturovaných, bezpečných a spolehlivých pluginů pro WordPress. Esencí vývoje pluginů je správné využití akcí a filtrů hooků k rozšíření funkcí WordPressu, přičemž bezpečnost a udržovatelnost musí být vždy na prvním místě. Následně můžete zkoumat složitější API, jako jsou vlastní databázové tabulky, interakce pomocí AJAX nebo REST API endpointy, abyste vytvořili ještě výkonnější nástroje.

Časté dotazy

Jaké jsou předpoklady potřebné k vývoji WordPress pluginu ###?
Potřebujete mít základní znalosti programování v PHP, a také bude velmi užitečné znát HTML, CSS a JavaScript (zejména jQuery). Nejdůležitější je, abyste měli představu o základní architektuře WordPressu – konceptech jako jsou tematika (themes), pluginy, typy článků, uživatelské role atd. Tento průvodce předpokládá, že tyto základní znalosti již máte.

Jak ladit můj WordPress plugin?

Nejprve se ujistěte, že…wp-config.phpV souboru jsouWP_DEBUGKonstanta je nastavena natrueTo zobrazí na stránce chyby, varování a upozornění PHP. Dále lze použít…error_log()Funkce zapisuje informace o ladění do chybového logu serveru. Pro složitější ladění lze zvážit použití specializovaných laděcích doplňků, jako je Query Monitor, který umožňuje zobrazovat podrobné údaje o databázových dotazech, provedení hooků, načítání skriptů atd.

Jak bych měl distribuovat plugin, který jsem vyvinul?

Pro osobní použití nebo sdílení v malém rozsahu můžete soubor jednoduše zabalit do formátu ZIP. Pokud chcete svůj plugin zveřejnit, existují dvě hlavní možnosti: první je odeslání do oficiálního adresáře WordPress pluginů (WordPress.org), což vyžaduje dodržování jejich pokynů pro odeslání a kódových standardů, ale nabízí největší možnost exponovanosti; druhá možnost je distribuce prostřednictvím vlastní webové stránky nebo třetích stran (např. CodeCanyon). Před odesláním do oficiálního adresáře se ujistěte, že kvalita a bezpečnost kódu jsou na správné úrovni.

Jak přidat do svého pluginu vlastní typy článků nebo klasifikace?

Můžete použít…register_post_type()Funkce slouží k vytvoření vlastního typu článku (Custom Post Type – CPT).register_taxonomy()Funkce slouží k vytvoření vlastní klasifikace. Tyto operace je nejlepší provádět…initAkce se provádějí v akčních hookech. V WordPress Codexu a Developer Handbooku naleznete podrobné popisy parametrů těchto funkcí; jedná se o skvělý způsob, jak rozšířit možnosti správy obsahu v WordPressu.

Jak se můžou předejít konfliktům mezi názvy funkcí v různých doplňcích (pluginech)?

Pro prevenci konfliktů mezi názvy funkcí, tříd nebo konstant je nejlepší praxí používat jmenné prostory (namespacey) od verze PHP 5.3+. Pokud váš plugin potřebuje podporovat starší verze PHP, nebo chcete zachovat co největší kompatibilitu, můžete použít metodu přidávání jedinečných předpon ke všem identifikátorům. Například můžete použít název pluginu nebo jeho zkratku jako předponu.myplugin_function_nameMyPlugin_ClassNameMYPLUGIN_CONSTANTV příkladech kódu v této příručce je použita metoda přidávání předpon.