Ultimátní průvodce vývojem WordPress pluginů: Klíčové techniky pro vytvoření vlastních funkcí od nuly

5 minut čtení
2026-03-16
2026-06-03
2,317
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.

Porozumění základní architektuře pluginů pro WordPress

Než začnete psát kód, je zásadní pochopit základní strukturu WordPress pluginů. Plugin je v podstatě jednou nebo více PHP souborů, které se nacházejí v určitých adresářích v systému WordPress./wp-content/plugins/V adresáři lze rozšiřovat základní funkce WordPress pomocí API (Application Programming Interface) poskytovaného samotným WordPressem. Jádrem jakéhokoli pluginu je hlavní soubor, který musí obsahovat specifické poznámky v záhlaví souboru (header comments), aby ho WordPress mohl rozpoznat a spravovat.

Složení hlavního souboru pluginu

Vstupní bod pluginu je obvykle PHP soubor se stejným názvem jako plugin sám. Na začátku tohoto souboru musí být standardizovaná poznámka, která poskytuje WordPress metadaty o pluginu. Tato poznámka musí obsahovat alespoň název pluginu, popis, verzi, autora a licenci. Například pro plugin s názvem “My Custom Widget” by hlavní soubor mohl vypadat takto:my-custom-widget.phpZačátek může vypadat následovně:

<?php
/**
 * Plugin Name: My Custom Widget
 * Plugin URI: https://www.example.com/my-custom-widget
 * Description: 这是一个用于演示的自定义小工具插件。
 * Version: 1.0.0
 * Author: Your Name
 * Author URI: https://www.example.com
 * License: GPL v2 or later
 * Text Domain: my-custom-widget
 */

V tomto komentáři je “Plugin Name” jediný povinný polí pro rozpoznávání pluginů v WordPressu. Ačkoli jsou ostatní pole volitelná, pro normální fungování a udržovatelnost pluginu je doporučeno je vyplnit všechna. Pole “Text Domain” slouží k internacionalizaci a je klíčové pro přidání podpory více jazyků do pluginu.

Doporučujeme k přečtení. Průvodce vývojem pluginů pro WordPress: Vytvoření vlastních funkčních modulů od nuly

Nejlepší postupy pro strukturu adresáře plug-inů

Pro jednoduché pluginy může stačit jediný PHP soubor. Pro však pluginy s komplexními funkcemi je nezbytná jasná a modulární struktura adresářů. Typický adresář profesionálního pluginu může obsahovat následující části:

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.
  • Hlavní soubor (main file)plugin-name.php):Návodový soubor pro plugin, který obsahuje poznámky k začátku souboru a hlavní logiku nebo načítač (loader).
  • includes/src/Katalog slouží k uložení hlavních PHP tříd a funkcionalitních modulů.
  • admin/Katalog slouží k uložení kódu a stránek souvisejících s rozhraním pro správu z pozadí (backend management interface).
  • public/frontend/Katalog obsahuje logiku určenou k zpracování vzhledu webové stránky (jejího front-endu).
  • assets/Obsah: Obsahuje statické zdroje jako JavaScript, CSS a obrázky.
  • languages/Katalog slouží k uložení souborů s mezinárodními překlady (.po/.mo).
  • uninstall.phpVolitelný, ale doporučený soubor, který slouží k úklidu dat ze databáze (např. nastavení týkajících se odstranění pluginů) po odstranění daného pluginu uživatelem.

Tento strukturovaný způsob organizace kódu nejen usnadňuje jeho údržbu a týmovou spolupráci, ale také odpovídá nejlepším postupům v moderním vývoji PHP.

Ovládněte základní nástroje pro vývoj: akce a filtrovací hooky

Kerní filozofie vývoje pluginů pro WordPress je “hooky”. Mechanismus hooků umožňuje vašemu pluginu v určitých okamžicích “zapojit” se do hlavního procesu WordPressu, čímž můžete modifikovat nebo přidávat funkce, aniž byste museli přímo měnit základní kód WordPressu. Hooky se dělí především na dvě kategorie: akční hooky (Action Hooks) a filtrovací hooky (Filter Hooks).

Využití akčních hooků

Akční háčky spouštějí váš vlastní kód po nastavení určitých událostí. Například po zveřejnění článku nebo po inicializaci menu v administračním rozhraní.add_action()Funkce může vaši funkci “nasadit” („mount“) na nějaký akční hook (akční bod).

Předpokládejme, že chcete automaticky přidávat prohlášení o autorských právech na konci každého článku. Můžete k tomu využít následující postup:the_contentTento filtr (všimněte si, že se jedná ve skutečnosti o filtr, ale jeho fungování je podobné některým akcím) slouží k zaznamenávání logů po přihlášení uživatele. Níže je příklad použití akčního háčku (action hook).wp_footerPříklad výstupu informací v patičce webové stránky:

Doporučujeme k přečtení. Ovládnutí vývoje pluginů pro WordPress: Vytvoření vlastních funkcí od nuly

function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Děkujeme, že používáte naši stránku!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

Když WordPress provede…wp_footerPři aktivaci tohoto akčního bodu (obvykle v rámci tématu…)footer.phpVolání v…wp_footer()Pokud je funkce spuštěna, budou aktivovány všechny funkce, které jsou na ni nasazeny (mountovány), včetně té, kterou jsme právě definovali.myplugin_add_footer_text

Využití filtrovacích hooků

Filtrovací háčky slouží k úpravě dat. Přijímají proměnnou, která po zpracování vaší funkcí musí být vrácena ve změněné podobě. Jedná se o jednu z nejmocnějších metod pro změnu výchozího chování WordPressu. Používejte je.add_filter()Funkce je následně nasazena („montována“).

Například, pokud chcete změnit délku shrnutí článku, můžete použít…excerpt_lengthFiltr:

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.
function myplugin_custom_excerpt_length( $length ) {
    // 将默认的55个单词改为20个单词
    return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' );

Dalším běžným případem použití je úprava výstupu obsahu článků. Následující kód přidává před každým článkem informační okno („tipové okno“).

function myplugin_add_content_notice( $content ) {
    if ( is_single() ) {
        $notice = '<div class="notice">Tento článek je originálního obsahu. Při jeho reprodukci prosím uveďte zdroj.</div>';
        $content = $notice . $content;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_content_notice' );

Porozumění a obratné využívání různých „hooků“ je klíčem k tomu, stát se efektivním vývojářem WordPressu. Oficiální příručka pro pluginy WordPress poskytuje úplný seznam všech dostupných hooků.

Vytvoření administrativního rozhraní pro správu pluginů

Většina pluginů vyžaduje stránku pro konfiguraci, na které mohou administrátoři webových stránek nastavit různé parametry. WordPress poskytuje bohatou sadu API, která umožňuje vytvářet estetické a standardizované administrátorské stránky.

Doporučujeme k přečtení. Ovládnutí vývoje pluginů pro WordPress: Postavte si svůj první rozšiřující modul od nuly

Vytvořte hlavní správní menu a stránky.

Použitíadd_menu_page()Tato funkce umožňuje vašemu pluginu přidat do postranního panelu v pozadí horní položku menu spolu s odpovídající stránkou pro nastavení. K použití této funkce je potřeba definovat následující parametry: název stránky, název menu, oprávnění, přezdívku menu a funkci na zpětnou volání.

Následující příklad kódu vytvořil hlavní menu stránku s názvem “Moje nastavení pluginu”:

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.
Funkce myplugin_add_admin_menu() {
    add_menu_page(
        'Nastavení mého pluginu',   // Název stránky
        'Můj plugin',             // Název menu
        'manage_options',   // Oprávnění (obvykle manage_options, viditelné pouze pro administrátory)
        'myplugin-settings',   // Název menu (služebník), používaný pro URL
        'myplugin_settings_page_html',  // Výzvědná funkce pro vykreslení obsahu stránky
        'dashicons-admin-generic',  // Ikona menu (použití Dashicons)
        80   // Pozice menu
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// Definice výzvědné funkce pro vykreslení obsahu stránky
function myplugin_settings_page_html() {
    // Zkontrolujte oprávnění uživatele
    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
            // 输出设置字段、非ces等(需要与settings API配合使用)
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Bezpečné zpracování možností pomocí API nastavení

Přímé odesílání dat prostřednictvím formulářů s sebou nese bezpečnostní rizika. API Settings v WordPressu poskytuje sadu bezpečných a standardizovaných metod pro registraci, ověřování a ukládání nastavení. Automaticky zpracovává ověřování „nonce“ hodnot, kontrolu oprávnění a čištění dat.

Použití API Settings obvykle zahrnuje tři kroky:
1. 注册设置:使用register_setting()Definujte sadu možností a jejich ověřovacích callback funkcí.
2. 添加设置区块:使用add_settings_section()Přidejte na stránku jeden blok.
3. 添加设置字段:使用add_settings_field()Do bloku přidejte konkrétní vstupní pole.

Níže je zjednodušený příklad, který ukazuje, jak registrovat pole pro výběr textových možností:

function myplugin_settings_init() {
    // 1. 注册一个设置选项组
    register_setting( 'myplugin_options', 'myplugin_options_field', array(
        'sanitize_callback' => 'myplugin_sanitize_text_field' // 清理函数
    ) );

// 2. 添加一个设置区块
    add_settings_section(
        'myplugin_section_main',
        '主要设置',
        null, // 可选的区块描述回调函数
        'myplugin-settings'
    );

// 3. 为区块添加一个字段
    add_settings_field(
        'myplugin_field_text',
        '示例文本',
        'myplugin_field_text_html', // 渲染字段HTML的回调函数
        'myplugin-settings',
        'myplugin_section_main',
        array( 'label_for' => 'myplugin_field_text' )
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染函数
function myplugin_field_text_html() {
    $options = get_option( 'myplugin_options_field' );
    $value = isset( $options['text'] ) ? $options['text'] : '';
    ?>
    <input type="text" id="myplugin_field_text" name="myplugin_options_field[text]" value="<?php echo esc_attr( $value ); ?>" class="regular-text">
    <?php
}

// 数据清理函数
function myplugin_sanitize_text_field( $input ) {
    $sanitized_input = array();
    if ( isset( $input['text'] ) ) {
        $sanitized_input['text'] = sanitize_text_field( $input['text'] );
    }
    return $sanitized_input;
}

Implementace front-end funkcí pluginu a šablonovacích kódů (shortcodes)

Pluginy nejsou omezeny pouze na backend – je důležitější, že poskytují funkce i pro frontend webových stránek. Kromě zmíněné možnosti úpravy obsahu pomocí hooků jsou shortcodey (zkrácené kódy) velmi účinným nástrojem pro poskytování dynamických funkcí redaktorům obsahu a šablonám.

Vytváření a používání zkratkovacích kódů

Shortcodes umožňují uživatelům používat jednoduché značky (např.)[my_gallery]Vložit složité funkce do článku nebo stránky. Použijte…add_shortcode()Funkce slouží k registraci zkratkového kódu.

Následující kód vytváří jednoduchý „shortcode“, který slouží k zobrazení tlačítka s vlastním pozdravem:

function myplugin_hello_shortcode( $atts, $content = null ) {
    // 解析短代码属性,并提供默认值
    $attributes = shortcode_atts(
        array(
            'name' =&gt; '访客',
            'color' =&gt; 'blue',
        ),
        $atts,
        'hello' // 短代码标签
    );

// 确保颜色值安全
    $color = esc_attr( $attributes['color'] );
    $name = esc_html( $attributes['name'] );

// 构建输出
    $output = '<button style="background-color: ' . $color . '; padding: 10px; color: white; border: none;">';
    $output .= '你好,' . $name . '!';
    $output .= '</button>';

// 如果短代码是封闭式的(有内容),则包含内容
    if ( ! is_null( $content ) ) {
        $output .= '<div>'. do_shortcode($content)'.'</div>';
    }

return $output;
}
add_shortcode( 'hello', 'myplugin_hello_shortcode' );

Uživatelé mohou v editoru článků používat následující způsob:
* [hello name="张三" color="red"]
* [hello]点击我![/hello]

Přidání vlastních nástrojů („plug-in tools“) do pluginu

Widget je obsahový blok v bočním panelu nebo na spodní straně stránky (v takzvané „footer“ oblasti) v WordPressu. Pro vytvoření vlastní třídy widgetu je nutné provést její rozšíření (extension).WP_WidgetZákladní třída a implementace několika klíčových metod: konstruktor, metoda pro výstup na stránku a metoda pro aktualizaci formuláře.

Vytvořte jednoduchý nástroj, který zobrazuje názvy nejnovějších článků:

class Myplugin_Recent_Posts_Widget extends WP_Widget {
    // 构造方法:定义小工具ID、名称和描述
    public function __construct() {
        parent::__construct(
            'myplugin_recent_posts',
            '我的插件:近期文章',
            array( 'description' =&gt; '显示您网站的最新文章列表。' )
        );
    }

// 前端显示逻辑
    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        if ( ! empty( $instance['title'] ) ) {
            echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
        }

$posts = get_posts( array( 'numberposts' =&gt; $instance['number'] ?: 5 ) );
        echo '<ul>';
        foreach ( $posts as $post ) {
            setup_postdata( $post );
            echo '<li><a href="/cs/' . get_permalink( $post->ID ) . '/">' . get_the_title( $post-&gt;ID ) . '</a></li>';
        }
        wp_reset_postdata();
        echo '</ul>';

echo $args['after_widget'];
    }

// 后台小工具表单
    public function form( $instance ) {
        $title = ! empty( $instance['title'] ) ? $instance['title'] : '近期文章';
        $number = ! empty( $instance['number'] ) ? $instance['number'] : 5;
        ?&gt;
        <p>
            <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">Název:</label>
            <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
        </p>
        <p>
            <label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>">Zobrazit počet článků:</label>
            <input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="number" min="1" value="<?php echo esc_attr( $number ); ?>">
        </p>
        &lt;?php
    }

// 更新小工具设置
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[&#039;title&#039;] = ( ! empty( $new_instance[&#039;title&#039;] ) ) ? sanitize_text_field( $new_instance[&#039;title&#039;] ) : &#039;&#039;;
        $instance[&#039;number&#039;] = ( ! empty( $new_instance[&#039;number&#039;] ) ) ? absint( $new_instance[&#039;number&#039;] ) : 5;
        return $instance;
    }
}

// 注册这个小工具
function myplugin_register_widget() {
    register_widget( &#039;Myplugin_Recent_Posts_Widget&#039; );
}
add_action( &#039;widgets_init&#039;, &#039;myplugin_register_widget&#039; );

Závěr

Vývoj pluginů pro WordPress je proces, který kombinuje programování v PHP s hlubokým pochopením základní architektury WordPressu. Úspěšný začátek spočívá v vytvoření souborové struktury a hlavního souboru („header file“) podle předepsaných norem. Dále je klíčové dobře ovládat akční háčky („action hooks“) a filtrovací háčky („filter hooks“), které vám umožňují vstupovat do datového toku nebo jej upravovat v přesně určených okamžicích, díky čemuž můžete plně využít silné rozšiřovací možnosti WordPressu. Pro poskytnutí uživatelsky přívětivého zážitku při konfiguraci je nezbytné využít API Admin Menu a API Settings k vytvoření bezpečného a standardizovaného administrátorského rozhraní. Nakonec můžete funkce pluginu plynule integrovat do front-end obsahu a layoutu webové stránky pomocí zkratkovacích kódů („shortcodes“) a vlastních nástrojů („custom tools“), čímž poskytnete uživatelům flexibilní způsoby zobrazení obsahu. Dodržováním těchto základních principů můžete systematicky vytvářet funkční, dobře strukturované a snadno udržovatelné pluginy pro WordPress.

Časté dotazy

Jaké jsou předpoklady pro vývoj pluginů pro WordPress?

Potřebujete mít solidní základy programování v PHP a základní znalosti HTML, CSS a JavaScript. Znalost konceptů objektového programování (OOP) bude velmi užitečná při vývoji větších pluginů. Kromě toho jsou nezbytné nástroje jako lokální vývojové prostředí (např. Local by Flywheel, XAMPP, MAMP) a integrované vývojové prostředí (IDE) určené k editování kódu (např. VS Code, PhpStorm).

Jak zajistit, aby plugin, který vyvíjím, byl bezpečný a vysoce výkonný?

Z hlediska bezpečnosti: Vždy provádějte ověřování a čištění uživatelského vstupu a využívejte vestavěné funkce WordPressu.sanitize_text_field(), esc_html(), wp_kses()Při zpracovávání formulářů a Ajax požadavků je nutné vždy používat ověřování pomocí „nonce“ hodnot. Využijte předdefinované třídy pro práci s databází WordPress (např.…)$wpdbTo je způsob, jak zabránit SQL injectionům. Co se týká výkonu: Skripty a styly se načítají pouze v případě potřeby (používá se…).wp_enqueue_script()A nastavte správně závislosti a podmínky načítání. Ukládejte výsledky časově náročných dotazů do mezipaměti pomocí API Transients. Vyhněte se provádění velkého množství zbytečných databázových dotazů při inicializaci pluginu.

Jak bych měl ladit a testovat svůj plugin?

Během vývojové fáze, prosím…wp-config.phpAktivováno v souboru.WP_DEBUGWP_DEBUG_LOGTo umožní zaznamenávat chyby a varování PHP do souborů protokolů, což usnadní vyšetřování problémů. Pro prohlížení síťových požadavků a chyb JavaScript můžete použít nástroje pro vývojáře v prohlížeči. Pro ladění logiky kódu…error_log()Funkce a doplňky, jako je “Query Monitor”, jsou vynikajícími nástroji. Je nezbytné je otestovat na různých verzích PHP a WordPressu, abyste zajistili jejich kompatibilitu.

Jak přidat mému pluginu podporu internacionalizace?

Nejprve správně nastavte poznámky v hlavičce hlavního souboru.Text Domain(Například: „my-plugin-text-domain“.) V kódu vyměňte všechny textové stránky, které je třeba přeložit, za odpovídající české texty.__()nebo_e()Zabalte funkci do příslušného obalu a předejte obsah vašeho textového pole. Poté použijte nástroje, jako je Poedit, k vytvoření požadovaného výstupního souboru..potŠablonský soubor, na základě kterého jsou generovány verze v různých jazycích..po.moPřeložte soubor a umístěte ho do pluginu./languages/Obsah.

Jak po dokončení vývoje zveřejnit můj plugin?

Můžete si vybrat, zda budete svůj plugin zveřejňovat v oficiálním adresáři WordPress pluginů – jedná se o nejrozšířenější způsob distribuce. To vyžaduje, aby váš plugin splňoval podmínky licence GPL a prošel přísným přezkumem kódu. Stejně tak můžete svůj plugin distribuovat na svém vlastním webu nebo na třetích stranách (např. na trzích s softwarem). Ať už zvolíte jakýkoli způsob, je důležité poskytnout jasné dokumentace, záznamy o aktualizacích, informace o kompatibilitě a vytvořit plán pro průběžnou údržbu a aktualizace pluginu.