Začínáme od nuly: Kompletní průvodce vývojem pluginů pro WordPress a sdílení osvědčených postupů.

Čtení za 3 minuty.
2026-03-11
2026-06-04
2,880
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 nastavení vývojového prostředí

Jádrem vývoje pluginů pro WordPress je rozšíření základních funkcí WordPressu, a vše začíná dobře strukturovaným vývojovým prostředím. Plugin je v podstatě jedním nebo více souborů v formátu PHP, které jsou umístěny v adresáři instalace WordPressu./wp-content/plugins/V té složce. Každý plugin musí mít hlavní soubor, který obsahuje blok poznámek umístěný na začátku. Tento blok poznámek slouží jako “identifikátor” pluginu a slouží k uvedení základních informací o pluginu do systému WordPress.

Typický komentář v hlavičce pluginu vypadá následovně:

<?php
/**
 * Plugin Name: 我的第一个WordPress插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于演示的简单插件。
 * Version:     1.0.0
 * Author:      开发者名称
 * Author URI:  https://example.com
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

Tento komentář je velmi důležitý, protože umožňuje tomuto pluginu být zobrazen na stránce pro správu pluginů v pozadí WordPressu.Text DomainPoužito pro internacionalizaci a přípravu na následné překladatelské práce.

Doporučujeme k přečtení. Kompletní průvodce vývojem pluginů pro WordPress: praktický návod od nuly až po publikování a spuštění.

Nastavení lokálního vývojového prostředí.

Před zahájením kódování je efektivním a bezpečným rozhodnutím vytvořit si lokální vývojové prostředí. Doporučujeme použít nástroje jako XAMPP, MAMP, Local by Flywheel nebo Docker k nastavení lokálního serveru obsahujícího Apache/Nginx, MySQL a PHP. Ujistěte se, že verze PHP odpovídá požadavkům aktuální verze WordPress (obvykle se doporučuje PHP 7.4 nebo vyšší). Kromě toho…wp-config.phpZapnout v…WP_DEBUGTyto vzorce pomáhají během vývoje rychle objevovat a opravovat chyby.

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.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // 将错误日志保存到 /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息

Kerní architektura pluginu a mechanismus hooků

Porozumění mechanismu hooků v WordPressu je zásadní pro vývoj doplňků (pluginů). Hooky umožňují vašemu doplňku v určitéch okamžicích “zapojit” se do hlavního procesu WordPressu a spustit vlastní kód. Hooky se dělí především na dvě kategorie: akce (Actions) a filtry (Filters).

Akční hooky a filtrovací hooky

Akční háčky (Action Hooks) vám umožňují spustit kód po skutečném nastání určité události. Například můžete po zveřejnění článku odeslat upozornění e-mailem nebo po přihlášení uživatele zaznamenat to do logů.add_action()Funkce slouží k registraci vaší funkce do určitého akčního háčku (action hook).

function myplugin_send_notification( $post_id ) {
    // 当文章发布时,执行发送通知的逻辑
    wp_mail( '[email protected]', '新文章已发布', '文章ID:' . $post_id );
}
// 将 myplugin_send_notification 函数挂载到 ‘publish_post’ 这个动作钩子上
add_action( 'publish_post', 'myplugin_send_notification' );

Filtrační háčky (Filter Hooks) vám umožňují upravovat data, která jsou předávána během určitého procesu. Například můžete změnit způsob zobrazení obsahu článku nebo změnit návratovou hodnotu nějaké funkce.add_filter()Funkce slouží k registraci filtrů.

function myplugin_modify_content( $content ) {
    // 在文章内容的末尾追加一段自定义文本
    $custom_text = '<p><em>Děkujeme, že jste si to přečetli! Tento text byl přidán pomocí mého pluginu.</em></p>';
    return $content . $custom_text;
}
// 将 myplugin_modify_content 函数挂载到 ‘the_content’ 这个过滤器钩子上
add_filter( 'the_content', 'myplugin_modify_content' );

Vytvoření hlavní třídy pluginu

I když jednoduché pluginy mohou sestávat pouze z několika funkcí, zejména z důvodu modulárnosti kódu, snadné údržby a předcházení konfliktům při používání jmen funkcí se doporučuje využít objektově orientovaný (OO) přístup a funkce pluginu uzavřít do jedné hlavní třídy. Toto je osvědčená praxe při vývoji moderních WordPress pluginů.

Doporučujeme k přečtení. Úvod do vývoje témat WordPressu: vytvořte své první téma od nuly.

class My_First_Plugin {
    public function __construct() {
        // 在构造函数中挂载所有的钩子
        add_action( 'init', array( $this, 'register_shortcode' ) );
        add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
    }

public function register_shortcode() {
        add_shortcode( 'greeting', array( $this, 'render_greeting' ) );
    }

public function render_greeting( $atts ) {
        return '<h3>Ahoj, WordPress!</h3>';
    }

public function add_admin_page() {
        add_menu_page(
            '我的插件设置',
            '我的插件',
            'manage_options',
            'my-plugin-settings',
            array( $this, 'render_admin_page' )
        );
    }

public function render_admin_page() {
        echo '<div class="wrap"><h2>Stránka nastavení pluginu</h2><p>Toto je správní rozhraní.</p></div>';
    }
}
// 初始化插件
new My_First_Plugin();

Vytvoření správního rozhraní a šablon pro krátké kódy

Plug-in s kompletní funkcionalitou obvykle vyžaduje interakci s uživateli, což zahrnuje poskytnutí administrátorům webových stránek stránek pro nastavení v pozadí, stejně jako jednoduché způsoby volání funkcí pro editory obsahu na straně uživatelů.

Vytvoření stránky pro nastavení backendu

WordPress poskytuje bohatou sadu API pro vytváření nabídek a podnabídek v administraci, například…add_menu_page()add_submenu_page()Na stránce nastavení můžete využít API pro nastavení WordPressu (Settings API) k bezpečné registraci, ověření a uložení možností. Je to bezpečnější než manuální zpracování.$_POSTData musí být mnohem bezpečnější a spolehlivější.

public function add_admin_page() {
    add_options_page(
        '我的插件选项',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 权限要求
        'my-plugin-options',    // 菜单slug
        array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
    );
    // 注册设置、节和字段
    add_action( 'admin_init', array( $this, 'register_settings' ) );
}

public function register_settings() {
    register_setting( 'myplugin_options_group', 'myplugin_option_name' );
    add_settings_section( 'myplugin_section_id', '主要设置', null, 'my-plugin-options' );
    add_settings_field( 'myplugin_field_id', '示例字段', array( $this, 'field_html' ), 'my-plugin-options', 'myplugin_section_id' );
}

public function field_html() {
    $option = get_option( 'myplugin_option_name' );
    echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}

public function 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
            settings_fields( 'myplugin_options_group' );
            do_settings_sections( 'my-plugin-options' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="cs"/></form>
    </div>
    <br />&lt;?php
}

Implementace funkce zkrácených kódů

Shortcodes jsou skvělým způsobem, jak umožnit uživatelům snadno vkládat funkce pluginů do článků nebo stránek.add_shortcode()Funkce je registrována a její callback funkce přijímá určité atributy.$atts)a obsah ($contentPřijímá parametry a vrací obsah, který se nakonec má zobrazit.

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.
public function register_shortcodes() {
    add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}

public function render_latest_posts( $atts ) {
    // 设置默认属性,并使用 shortcode_atts 合并用户传入的属性
    $attributes = shortcode_atts( array(
        'count' =&gt; 5,
        'category' =&gt; '',
    ), $atts );

$args = array(
        'posts_per_page' =&gt; intval( $attributes['count'] ),
        'post_status' =&gt; 'publish',
    );
    if ( ! empty( $attributes['category'] ) ) {
        $args['category_name'] = sanitize_text_field( $attributes['category'] );
    }

$query = new WP_Query( $args );
    $output = '<ul>';
    while ( $query-&gt;have_posts() ) {
        $query-&gt;the_post();
        $output .= '<li><a href="/cs/' . get_permalink() . '/">'. get_the_title() . '</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';
    return $output;
}

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

V poslední fázi vývoje je nutné zajistit, aby byl plugin bezpečný, efektivní a snadno distribuovatelný. Ignorování těchto aspektů může vést k bezpečnostním chybám, zpomalení fungování webové stránky nebo špatnému uživatelskému zážitku.

Bezpečnost a ověřování dat

Veškerá data pocházející od uživatelů nebo z externích zdrojů (např. URL parametry, odeslání formulářů, databáze) jsou nepodstatně důvěryhodná. Je nutné je ověřit, očistit a zakódovat pomocí sady funkcí poskytovaných WordPressem.
* 验证(Validation):检查数据是否符合预期格式(如是否为邮箱、数字),使用is_email()intval()Atd.
* 清理(Sanitization):在数据保存到数据库之前,移除其中不安全的字符,使用sanitize_text_field()sanitize_email()wp_kses_post()Atd.
* 转义(Escaping):在将数据输出到HTML、JavaScript或URL之前,对其进行编码,防止XSS攻击,使用esc_html()esc_js()esc_url()esc_attr()Atd.

Při operacích s databází je nutné vždy používat…$wpdbMetody poskytované tímto typem (třídou) a jejich využitíprepare()Provedení parametrizovaného dotazu umožňuje zabránit útokům typu SQL injection.

Doporučujeme k přečtení. Principy zrychlení pomocí CDN a praktický průvodce: Jak pro své webové stránky vybrat nejlepší síť pro distribuci obsahu

Optimalizace výkonu a pozdější údržba

Výkon je klíčovým faktorem pro uživatelský zážitek. Vyhněte se spouštění časově náročných dotazů nebo zpracování při načítání každé stránky. Pro data, která se často nemění, použijte API pro dočasné úložiště (Transients API) v WordPressu k jejich ukládání.

$data = get_transient( 'myplugin_expensive_data' );
if ( false === $data ) {
    $data = // ... 执行复杂的数据库查询或远程API调用 ...
    set_transient( 'myplugin_expensive_data', $data, HOUR_IN_SECONDS ); // 缓存1小时
}

Pro přidání podpory internacionalizace a lokalizace pro plugin použijte…__()_e()Funkce „wait“ obaluje veškerý text viditelný pro uživatele a prostřednictvím…load_plugin_textdomain()Načítání jazykových souborů. Zároveň je třeba dobře naplánovat životní cyklus pluginů a napsat kódy pro jejich aktivaci.register_activation_hookDeaktivovat (disable)register_deactivation_hook) a odinstalování (register_uninstall_hookLogika zpracování háčků slouží k vytváření/změně struktur databázových tabulek, čištění nastavení atd.

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.

Příprava k publikaci: Dokumentace a balení

Před vydáním vytvořte podrobný…readme.txtSoubory musí splňovat oficiální specifikace WordPressu, včetně popisu pluginu, pokynů k instalaci, častých otázek, logů aktualizací atd. Toto je stránka s informacemi o vašem pluginu v adresáři s pluginy WordPressu. Nakonec se ujistěte, že struktura adresáře s pluginem je jasná, obsahuje pouze potřebné soubory a že je balen ve standardním formátu ZIP.

Závěr

Vývoj pluginů pro WordPress je proces přeměny nápadů na funkční řešení, který vychází z hlubokého pochopení základní architektury WordPressu – zejména z mechanismů „hooků“. Prvním krokem na cestě začátečníka je nastavení prostředí, napsání základní struktury pluginu a osvojení použití akcí a filtrů. Organizace kódu pomocí objektově orientovaného programování významně zvyšuje udržovatelnost projektu. Bezpečné zadní stranové rozhraní vytvořené pomocí API Settings API a flexibilní funkce na straně uživatelů prostřednictvím krátkého kódu představují hlavní nástroje pro interakci mezi pluginem a uživateli. K dokončení vývoje je důležité neustále dodržovat osvědčené postupy v oblasti bezpečnosti (ověřování, čištění dat, escapeování), výkonu (caching, optimalizace dotazů) a internacionalizace. Kromě toho je nezbytné připravit kompletní dokumentaci. Pouze tak lze vytvořit profesionální, spolehlivý a populární plugin pro WordPress.

Časté dotazy

K vývoji WordPress pluginů je potřeba ovládat následující programovací jazyky:

Hlavní požadavek je důkladné ovládnutí PHP, protože samotný WordPress spolu s jeho pluginy a tematikami je napsán v PHP. Zároveň je nutné mít základní znalosti HTML, CSS a JavaScriptu pro vytváření uživatelského rozhraní a interakční logiky pluginů. V případě komplexních operací s databázemi jsou také potřebné základní znalosti SQL.

Jak zabránit konfliktům mezi pluginy, které jsem vyvinul, a jinými pluginy?

Hlavní metodou je zajistit jedinečnost názvů vašich funkcí, tříd, proměnných a dalších identifikátorů. Nejlepší praxí je používat objektově orientované programování a všechny kódy uzavřít do jedné třídy. Pro funkce a globální proměnné lze použít jedinečné předpony – například předpony založené na názvech pluginů nebo samotných funkcí.myplugin_function_nameMyPlugin_ClassName

Proč byl do mého pluginu v pozadí přidán menu, ale na stránce se zobrazí zpráva “Nemáte dostatečná oprávnění k přístupu k této stránce”?

To je proto, že při volání…add_menu_page()Při použití podobných funkcí není nastaven parametr „Capability“ správně. Je nutné zajistit, že třetí parametr (povolení) odpovídá oprávněním aktuálního uživatelského účtu. Pro stránky určené výhradně pro administrátory se obvykle používají specifická oprávnění.‘manage_options’Můžete to znovu použít v funkci na zpětné volání.current_user_can( ‘manage_options’ )Proveďte kontrolu.

Jak přidat podporu pro překlady do mého pluginu?

Nejprve je třeba správně nastavit poznámky v hlavičce hlavního souboru pluginu.Text Domain(Například)my-pluginPoté použijte…__( ‘Text’, ‘my-plugin’ )_e( ‘Text’, ‘my-plugin’ )Funkce obsahuje všechny řetězce, které je potřeba přeložit. Nakonec, při inicializaci pluginu (například…)init(Při provádění akce) použítload_plugin_textdomain()Existují funkce určené k načítání jazykových souborů. Pro vytvoření těchto souborů můžete použít nástroje, jako je např. Poedit..potŠablony a.po/.moPřekládání dokumentů.