Úplný průvodce vývojem pluginů pro WordPress: od začátku až po praktické využití při vytváření vlastních funkcí.

Čtení za 4 minuty.
2026-03-16
2026-06-03
2,629
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řehled vývoje pluginů pro WordPress

WordPress plugin je soubor skriptů v jazyce PHP určený k rozšíření a vylepšení základních funkcí WordPressu. Umožňuje vývojářům přidávat nové funkce, nástroje, správní panely nebo upravovat stávající chování bez nutnosti měnit samotný základní kód WordPressu. Plugin může být velmi jednoduchý – sestává se pouze z jednoho souboru – ale může být také velmi složitý a obsahovat více adresářů a různých typů souborů.

K pochopení jádra pluginu je důležitý jeho vstupní soubor. Každý plugin musí obsahovat alespoň jeden hlavní PHP soubor, ve kterém jsou na začátku uvedeny standardní metadaty pluginu. Tyto informace jsou následně přečteny správcem pluginů v WordPressu a zobrazeny v seznamu pluginů v pozadí.

Vytvořte svůj první plugin.

Vytvoření základní struktury souborů

Nejprve musíte vytvořit vstupní soubor pro plugin. Nachází se v adresáři vaší instalace WordPressu.wp-content/plugins/V té složce vytvořte novou složku, například…my-first-pluginV této složce vytvořte hlavní PHP soubor, jehož název se obvykle shoduje s názvem složky, například:my-first-plugin.php

Doporučujeme k přečtení. Začněte od nuly: vytvořte svůj první WordPress plugin.

Napsat informace o hlavičce pluginu

V této hlavní souboru musíte přidat poznámku o hlavičce pluginu, která splňuje standardy WordPressu. To je klíč k tomu, aby byl plugin rozpoznán a aktivován 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.
<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于演示的简单插件,它将在文章内容顶部添加一行文字。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Tento komentář poskytuje základní informace o tomto pluginu. Po uložení tohoto souboru ho uvidíte na stránce “Pluginy” v administraci WordPressu.

Implementovat jednoduchou funkci

Dále přidáme tomuto pluginu nejjednodušší funkci: na začátek všech článků se zobrazí řádek s vlastním textem. K tomu můžeme použít…the_contentTento filtrovací hook (Filter Hook) slouží k realizaci tohoto účelu.

function myplugin_add_text_to_content( $content ) {
    $custom_text = '<p>Tento text je pozdravem přidaným mým prvním pluginem!</p>';
    return $custom_text . $content;
}
add_filter( 'the_content', 'myplugin_add_text_to_content' );

Přidejte tento kód do svého hlavního pluginového souboru.my-first-plugin.phpV daném dokumentu uložte a aktivujte plugin. Nyní, když procházíte jakýmkoli příspěvkem nebo stránkou na webu, určený text se zobrazí na začátku obsahu. To je základní funkce tohoto pluginu.

Klíčové koncepty vývoje pluginů a API

Porozumění mechanismu hooků

Hooky funkcionalita je jádrem vývoje pluginů pro WordPress – umožňuje vašemu kódu “zapojit se” do prováděcího procesu samotného WordPressu nebo jiných pluginů. Hooky se hlavně dělí na dvě kategorie: akce (Action) a filtry (Filter).

Doporučujeme k přečtení. Jak se naučit vývoj pluginů pro WordPress od nuly: kompletní návod a praktické tutoriály

Slouží k spuštění vašeho vlastního kódu v určitém časovém okamžiku. Například…wp_footerTato funkce vám umožňuje vypsat HTML nebo skript na spodní část stránky. Můžete ji použít k zobrazení požadovaného obsahu.add_action()Funkce slouží k načtení a spuštění určité akce.

Filtry slouží k úpravě dat před tím, než jsou předány do databáze nebo prohlížeče. Například to, co bylo použito v předchozím příkladu…the_contentFiltr umožňuje upravovat obsah článků. Potřebujete jej použít.add_filter()Funkce slouží k přidání filtrů a vaše callback funkce musí vrátit upravenou hodnotu.

Používat třídy pro základní databázi

WordPress poskytuje výkonnou třídu pro abstrakci databází.wpdbSlouží k bezpečnému interakci s databází. Měli byste používat přímo tento globální objekt, místo abyste volali přímo PHP funkce pro práci s MySQL.

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.

Například, pokud chcete vyhledat určité informace v databázi, můžete postupovat následovně:

global $wpdb;
$results = $wpdb->get_results( "SELECT id, name FROM {$wpdb->prefix}my_custom_table" );

Všímejte si správného použití.$wpdb->prefixZajistěte správnost předpon tabulek. Při operacích vkládání, aktualizace nebo odstranění vždy používejte správné předpony.wpdbProvided asinsert()update()Metody jako tyto automaticky zpracovávají escape dat, čímž zabránějí útokům typu SQL injection.

Vytvořit stránku pro správu nastavení

Vytvoření stránky pro nastavení backendu pro plugin je základním požadavkem pro profesionální pluginy. WordPress poskytuje řadu API funkcí pro přidávání položek menu a stránek různého úrovně, přičemž nejčastěji používané jsou…add_menu_page()add_options_page()

Doporučujeme k přečtení. Praktický průvodce WooCommerce: Vytvořte profesionální e-commerce webové stránky od nuly do jedné.

Níže je příklad přidání vrchního menu a stránky se základními nastaveními:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',        // 页面标题
        '我的插件',            // 菜单标题
        'manage_options',      // 所需权限
        'myplugin-settings',   // 菜单Slug
        'myplugin_settings_page', // 回调函数,用于输出页面HTML
        'dashicons-admin-generic', // 图标
        6                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

function myplugin_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
                settings_fields( 'myplugin_settings_group' );
                do_settings_sections( 'myplugin-settings' );
                submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Tento příklad vytvoří hlavní menu s názvem “Moje příslušenství”; po kliknutí se přejdete do obsahu tohoto menu.myplugin_settings_pageStránky vykreslené pomocí funkcí. Obvykle se k tomu používá WordPressův Settings API.register_setting, add_settings_section, add_settings_fieldSlouží k bezpečnému zpracování a ukládání nastavení.

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.

Praktický projekt: Vývoj doplňku pro správu poznámek

V této části kombinujeme všechny výše uvedené znalosti a vytvoříme jednoduchou funkci “poznámky”, kterou lze použít na stránce pro úpravu článků. Tento doplněk umožňuje redaktorům přidávat soukromé vnitřní poznámky k článkům.

Vytvoření vlastní databázové tabulky

Nejprve, když je plugin aktivován, potřebujeme vytvořit novou databázovou tabulku pro ukládání poznámek. To lze provést registrací aktivního hooku.register_activation_hookAbychom toho dosáhli.

function my_note_plugin_activate() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_notes';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        post_id bigint(20) NOT NULL,
        note_content text NOT NULL,
        created_by bigint(20) NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'my_note_plugin_activate' );

Zde používáme…dbDelta()Funkce slouží k vytvoření nebo aktualizaci struktury tabulky. Jedná se o bezpečný a dobře kompatibilní způsob.

Přidejte metapole do rozhraní pro úpravu článků.

Dále potřebujeme na stránce pro úpravu článků přidat metapole, které budou sloužit k zobrazení a ukládání poznámek. K tomu budeme potřebovat…add_meta_boxFunkci a poté ji nasadíte (mountujete).add_meta_boxesV akci.

function my_note_add_meta_box() {
    add_meta_box(
        'my_note_meta_box',         // 元框的唯一ID
        '文章内部便签',             // 显示的标题
        'my_note_meta_box_callback', // 渲染元框内容的回调函数
        'post',                     // 要显示的帖子类型
        'side',                     // 位置
        'default'                   // 优先级
    );
}
add_action( 'add_meta_boxes', 'my_note_add_meta_box' );

function my_note_meta_box_callback( $post ) {
    // 从数据库获取当前文章的已有便签
    global $wpdb;
    $table_name = $wpdb-&gt;prefix . 'post_notes';
    $notes = $wpdb-&gt;get_results( $wpdb-&gt;prepare( "SELECT * FROM $table_name WHERE post_id = %d ORDER BY created_at DESC", $post-&gt;ID ) );

wp_nonce_field( 'my_note_save_action', 'my_note_nonce_field' );
    echo '<textarea name="my_new_note" rows="5" style="width:100%;" placeholder="Zadejte své vnitřní poznámky…."></textarea>'; echo '
    echo '<p class="description">Tato poznámka je viditelná pouze pro editory a administrátory webové stránky.</p>';

if ( $notes ) {
        echo '<hr><h4>Historické poznámky:</h4>';
        foreach ( $notes as $note ) {
            $user = get_user_by( 'id', $note-&gt;created_by );
            $username = $user ? $user-&gt;display_name : '未知用户';
            echo '<p><strong>' . esc_html( $username ) . ' (' . $note-&gt;created_at . '):</strong><br>';
            echo nl2br( esc_html( $note-&gt;note_content ) ) . '</p>';
        }
    }
}

Uložení a čištění dat

Když je článek uložen nebo aktualizován, je potřeba nové poznámky uložit do databáze. To lze provést pomocí následujících kroků:save_postAkce musí být implementovány pomocí příslušných kódových úprav. Zároveň, pokud je plugin odstraněn (volitelně), je také nutné poskytnout funkci pro odinstalaci tohoto pluginu.register_uninstall_hookPřijďte vyčistit vytvořené datové tabulky.

function my_note_save_post_data( $post_id ) {
    // 检查非ce、权限、自动保存等
    if ( ! isset( $_POST['my_note_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_note_nonce_field'], 'my_note_save_action' ) ) {
        return;
    }
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }

if ( ! empty( $_POST['my_new_note'] ) ) {
        global $wpdb;
        $table_name = $wpdb->prefix . 'post_notes';

$wpdb->insert(
            $table_name,
            array(
                'post_id' => $post_id,
                'note_content' => sanitize_textarea_field( $_POST['my_new_note'] ),
                'created_by' => get_current_user_id(),
            ),
            array( '%d', '%s', '%d' )
        );
    }
}
add_action( 'save_post', 'my_note_save_post_data' );

// 可选:卸载插件时删除数据表
function my_note_plugin_uninstall() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_notes';
    $wpdb->query( "DROP TABLE IF EXISTS $table_name" );
}
register_uninstall_hook( __FILE__, 'my_note_plugin_uninstall' );

Best Practices and Preparation for Release

Dodržovat standardy kódování WordPress

Pro zajištění čitelnosti, udržovatelnosti kódu a kompatibility s dalšími pluginy prosím striktně dodržujte oficiální PHP kódovací standardy WordPressu. To zahrnuje, ale není omezeno na: používání správného odsazení (tabulátory místo mezer), pojmenovávání funkcí a proměnných pomocí malých písmen a podtržek (snake_case), pojmenovávání tříd pomocí velkých písmen a podtržek (UpperCamelCase) a používání funkcí pro internacionalizaci všech překladatelných textových stránek.

Implementace internacionalizace

Vynikající plugin, který očekává široké využití, musí podporovat internacionalizaci. To znamená, že veškerý text určený pro uživatele by měl být uložen do funkcí pro překlad.

WordPress poskytuje…__()_e()_n()A řada dalších funkcí. Nejprve musíte nastavit správné informace v hlavičce pluginu.Text Domain(Například: „my-first-plugin“), a poté toto označení při každém výstupu nebo použití řetězce zabalit do speciálního obalu.

Například:

echo '<p>' . esc_html__( '这是一个演示文本。', 'my-first-plugin' ) . '</p>';

Poté můžete použít nástroje, jako je Poedit, k extrakci všech textových údajů a jejich následnému zpracování..potSoubor, určený k překladu do různých jazyků.mo.poDokumenty.

Optimalizace bezpečnosti a výkonu

Bezpečnost je při vývoji doplňků (plug-inů) nejdůležitějším aspektem. Vždy provádějte ověřování a očištění (sanitizaci) uživatelského vstupu a také escapeování výstupních dat. Při použití SQL dotazů je nutné dodržovat příslušná bezpečnostní pravidla.prepare()Používejte příkazy k zabránění injekcím („injections“). Před provedením jakékoli operace prověřte oprávnění uživatele.current_user_can()Pro případy, kdy není k dispozici „nonce“ (unikátní číslo), se používá mechanismus „nonce“ v rámci WordPressu.wp_nonce_field(), wp_verify_nonce())。

Z hlediska výkonu je důležité optimalizovat dotazy do databáze a vyhnout se jejich provádění v cyklech. Správně využívejte API „Transients“ v WordPressu k ukládání dočasných dat do mezipaměti. Když není potřeba používat žádné „mount hooks“, odstraňte je včas.remove_action(), remove_filter()Nakonec ve složce s pluginy obsažte pouze nutné soubory a před vydáním kód kompresujte a očistěte.

Připravujeme se ke zveřejnění do repozitáře WordPress.

Pokud plánujete vydat svůj plugin do oficiálního adresáře WordPress pluginů, je potřeba provést řadu přípravných kroků. Ujistěte se, že plugin má jasný a srozumitelný název, popis svých funkcí a vlastností, stejně jako vhodnou grafickou podobu. Také je důležité zajistit, aby plugin splňoval všechny požadavky a standardreadme.txtSoubor odpovídá formátovým požadavkům WordPressu. Měl by obsahovat popis pluginu, návody k instalaci, časté otázky (FAQ), záznamy o aktualizacích verze atd. Zároveň je důležité, aby byly informace v hlavičce hlavního souboru pluginu úplné a přesné. Důkladně otestujte kompatibilitu vašeho pluginu v různých prostředích a různých verzích WordPressu.

Závěr

Vývoj pluginů pro WordPress je tvůrčí proces, při kterém se nápady proměňují v funkční nástroje. Pochopením základní struktury pluginů, osvojení si klíčových principů hooků (Actions a Filters) a důkladném využití funkcí jako je Settings API a práce s databází, můžete vytvářet různé typy pluginů – od jednoduchých nástrojů až po komplexní řešení. Po celém vývojovém procesu mějte neustále na paměti bezpečnost, výkon, kódové standardy a internacionalizaci jako základní hodnoty. Začněte vytvářením svého prvního pluginu “Hello World”, postupně si osvojujte nové dovednosti a nakonec budete schopni s jistotou vytvářet profesionální, publikovatelné pluginy pro WordPress.

Časté dotazy

K vývoji pluginů je potřeba ovládat které technologie?

Potřebujete mít solidní základy v PHP, být obeznámeni s základními technologiemi HTML, CSS a JavaScript. Také je důležité mít základní znalosti databáze MySQL. Nejdůležitější však je, abyste porozuměli jádru WordPressu, zejména mechanismu hooků a hierarchii šablon (Template Hierarchy). Znalosti objektového programování (OOP) vám velmi pomohou při vývoji složitějších doplňků (pluginů).

Jaký je rozdíl mezi funkcemi pluginů a funkcemi tem (tém)?

Pluginy slouží k přidávání nebo úpravě funkcí webové stránky a v teorii by měly být odděleny od vzhledu webové stránky, aby byly vysoce přenositelné a mohly fungovat i po změně tématu. Témata ovládají především vzhled a uspořádání webové stránky, ačkoli moderní témata často obsahují také velké množství kódu určeného k provádění konkrétních funkcí – což je však považováno za špatnou praktiku. Optimální postup je následující: Pokud je nějaká funkce úzce spojena s vzhledem webové stránky, může být umístěna do tématu; pokud je funkce však obecná nebo nezávislá, měla by být vytvořena jako plugin.

Jak nakládat s aktualizacemi a kompatibilitou pluginů?

Pro zpracování aktualizací je nutné aktualizovat poznámky v hlavičce pluginu.VersionPro významné aktualizace můžete zvážit využití mechanismu upozornění na aktualizace a nástrojů pro jejich provedení v WordPressu. Klíčem k zajištění kompatibility je při vývoji striktně dodržovat základní API WordPressu, vyhýbat se používání soukromých nebo zastaralých funkcí a…readme.txtVe souboru je jasně uvedena nejnižší verze WordPressu, kterou tento plugin podporuje. Před vydáním nové verze je nutné plugin důkladně otestovat na více verzích WordPressu.

Jak by měly pluginy načítat soubory CSS a JavaScript?

Nikdy byste neměli přímo vkládat kód CSS nebo JS do souborů PHP pluginů. Pro zajištění kompatibility a výkonu je nutné použít funkci `wp_enqueue` v rámci WordPressu k správnému načtení skriptů a stylových souborů. Používejte tuto funkci v zázemí (v backendu).admin_enqueue_scriptsHook – používá se na straně klienta (frontend).wp_enqueue_scriptsHáček. Použijte ho.wp_enqueue_style()wp_enqueue_script()Funkce, a věnujte pozornost závislostem a verzím.

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

Přidání vlastního typu článku (Custom Post Type – CPT)register_post_type()Funkce: Přidání vlastní klasifikaceregister_taxonomy()Funkce. Nejlepší praxí je umístit tyto registrační operace…initAkce se provádí v rámci „akčních háčků“ (action hooks). Je nutné pečlivě nakonfigurovat pole s registračními parametry, včetně informací o štítku, úrovni přístupnosti, podporovaných funkcích a dostupnosti archivních stránek. Tyto parametry určují chování této akce jak v pozadí, tak i na uživatelském rozhraní.