Základy vývoje pluginů pro WordPress
WordPress pluginy jsou soubory v jazyce PHP, které rozšiřují funkce základního jádra WordPressu. Umožňují vývojářům přidávat nové funkce na webové stránky nebo měnit stávající chování bez nutnosti úprav základních souborů WordPressu. Plugin může být velmi jednoduchý – sestává se pouze z jednoho souboru – ale může také být složitější struktura obsahující více souborů, skriptů a šablon.
Porozumění základní struktuře pluginu
Nejzákladnějším souborem jakéhokoli pluginu je hlavní soubor tohoto pluginu. Tento soubor musí obsahovat specifický poznámkový řádek (“plugin header”), pomocí kterého WordPress rozpozná váš plugin. Tento poznámkový řádek se obvykle nachází na začátku souboru a obsahuje informace jako název pluginu, popis, verzi, autora a další podrobnosti. Například hlavní soubor pluginu s názvem „Můj pozdravný plugin“ by mohl vypadat takto: my-greeting-plugin.php Začátek může vypadat následovně:
<?php
/**
* Plugin Name: 我的问候插件
* Plugin URI: https://example.com/my-greeting-plugin
* Description: 一个简单的插件,用于在网站前台显示问候语。
* Version: 1.0.0
* Author: 开发者名称
* License: GPL v2 or later
* Text Domain: my-greeting-plugin
*/ Po přidání hlavičky pluginu můžete začít psát funkční kód pluginu. Veškerý kód pluginu by měl být uzavřen do podmínekových příkazů, aby se zabránilo přímému přístupu, který by mohl způsobit bezpečnostní problémy, a aby bylo zajištěno, že kód bude spuštěn pouze v prostředí WordPress.
Doporučujeme k přečtení. Od nuly: Vytvořte si svůj první WordPress plugin。
Katalog pluginů a organizace souborů
Pro pluginy s jednoduchými funkcemi může stačit jediný PHP soubor. S rostoucím počtem funkcí je však důležitá správná organizace souborů. Typická struktura adresáře s pluginem může obsahovat následující části:
- my-plugin/ (Hlavní adresář)
- my-plugin.php (Hlavní soubor pluginu)
- uninstall.php (Skript pro odinstalaci)
- includes/ (Katalog určený k uložení tříd nebo funkcí zajišťujících klíčové funkce aplikace)
- admin/ (Katalog určený k uložení kódu souvisejícího s administrací backendu)
- public/ (Katalog určený k uložení kódu souvisejícího s webovou přední stranou)
- assets/ (Katalog určený k uložení zdrojových souborů JavaScriptu, CSS a obrázků)
- languages/ (Katalog určený k uložení souborů s mezinárodními překlady)
Tato modulární struktura usnadňuje údržbu, testování a spolupráci při práci s kódem.
Klíčové koncepty vývoje: Hooky a filtry
Jádrem vývoje pluginů pro WordPress je systém “hooků”. Hooky vám umožňují vložit svůj vlastní kód v určitých momentech běhu WordPressu, čímž můžete změnit nebo doplnit jeho výchozí chování. Hooky se dělí na dvě hlavní typy: akční hooky (Action Hooks) a filtrovací hooky (Filter Hooks).
Přidání funkce pomocí akčních háčků
Akční háčky se spouštějí při nastání určitých událostí, např. při zveřejnění článku, přihlášení uživatele nebo načtení správní stránky. Nevrací žádné hodnoty volajícímu, ale slouží k “provedení nějaké akce”. Můžete je použít k realizaci různých funkcí v vašem aplikaci. add_action() Funkce “nasadí” svou vlastní funkci na určitý akční hook (akční bod).
Například, pokud chcete přidat vlastní text do podkladové části stránky (footer) webové stránky, můžete to provést pomocí následujících kroků: wp_footer Tento akční hook. V hlavním souboru pluginu můžete napsat následovně:
Doporučujeme k přečtení. Ultimátní průvodce vývojem pluginů pro WordPress: Vytvoření vlastních funkcí a rozšíření od nuly。
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">Děkujeme, že používáte naše webové stránky!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); Když WordPress provádí… wp_footer Když je dosaženo určité polohy, automaticky se spustí funkce, která byla registrována u vás. myplugin_add_footer_text Funkce.
Upravení obsahu pomocí filtrovacích hooků
Filtrovací háčky slouží k úpravě dat. Dávají vám možnost data upravit ještě před tím, než jsou odeslána do databáze nebo do prohlížeče. Funkce filtrů musí vrátit upravené hodnoty. add_filter() Funkce slouží k registraci filtrů.
Běžným příkladem je úprava nadpisů článků. Předpokládejme, že chcete automaticky přidávat do všech nadpisů článků symbol ochranné známky ™. K tomu můžete použít následující postup: the_title Filtr:
function myplugin_modify_post_title( $title, $post_id ) {
// 确保只在主循环且不是管理后台中修改
if ( ! is_admin() && in_the_loop() ) {
$title = $title . ' ™';
}
return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 ); Zde uvedené parametry… 10 Jde o prioritu – čím menší je číslo, tím dříve se operace provádí.2 Znamená to, že naše funkce na zpětné volání (callback function) přijímá dva parametry.$title 和 $post_id)。
Vytvořit stránku pro správu pluginů
Mnoho pluginů vyžaduje, aby v administraci WordPressu byla k dispozici stránka pro konfiguraci, která umožňuje uživatelům nastavovat různé parametry. WordPress poskytuje bohaté API pro vytváření hlavních a podmenu.
Přidat hlavní správní menu
Můžete použít… add_menu_page() Tato funkce vytvoří pro váš plugin samostatný správní menu. Vyžaduje více parametrů, mezi které patří název stránky, název menu, oprávnění uživatelů, přezdívka menu a také funkce na zpětnou volání (callback functions).
Doporučujeme k přečtení. Kompletní průvodce vývojem WordPress pluginů: Od základů po pokročilé praktické návody。
Následující kód ukazuje, jak přidat jednoduchou stránku s hlavním menu:
Funkce myplugin_add_admin_menu() {
add_menu_page(
'Nastavení mého pluginu', // Název stránky
'Můj plugin', // Název menu
'manage_options', // Požadovaná oprávnění (administrátor)
'myplugin-settings', // Alias menu (služba v URL)
'myplugin_settings_page', // Funkce pro výstup obsahu stránky
'dashicons-admin-generic', // Ikona menu (použití Dashicons)
30 // Pozice menu
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// Definice funkce pro výstup obsahu stránky
function myplugin_settings_page() {
?>
<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
// 输出设置字段和安全 nonce 字段
settings_fields( 'myplugin_options' );
do_settings_sections( 'myplugin-settings' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="cs"/></form>
</div>
<br /><?php
} Vytvoření možností pomocí API nastavení
Manuální zpracování odeslání a ověření formulářů je náročné a nebezpečné. WordPress API poskytuje standardizovaný způsob, jak registrovat, ověřovat a ukládat nastavení. Zahrnuje tři hlavní funkce:register_setting()、add_settings_section() 和 add_settings_field()。
Následující příklad ukazuje, jak registrovat skupinu nastavení a textové pole:
function myplugin_settings_init() {
// 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
register_setting(
'myplugin-settings', // 选项组,通常与页面别名一致
'myplugin_options', // 存储在 wp_options 表中的选项名
'myplugin_sanitize_callback' // 可选的清理回调函数
);
// 在页面中添加一个区域
add_settings_section(
'myplugin_section_main', // 区域的ID
'主要设置', // 区域标题
'myplugin_section_callback', // 区域描述的回调函数
'myplugin-settings' // 页面别名
);
// 向区域中添加一个字段
add_settings_field(
'myplugin_field_greeting', // 字段ID
'问候语', // 字段标签
'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
'myplugin-settings', // 页面别名
'myplugin_section_main', // 区域ID
[ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
$options = get_option( 'myplugin_options' );
$value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
} Bezpečnost pluginů a osvědčené postupy
Vytvořte populární plugin, přičemž bezpečnost a kvalita kódu jsou nejdůležitějšími aspekty. Nebezpečný plugin může být vstupní bránou pro útoky na webové stránky.
Data validation, cleaning, and escaping
Nikdy nesmíte důvěřovat datům, která zadají uživatelé, ani datům pocházejícím z databáze. Před zpracováním jakýchkoli dat je nutné je ověřit (validovat), očistit (sanitizovat) a zajistit jejich správné zpracování (např. pomocí escape funkcí).
- Verifikace: Zkontrolujte, zda data odpovídají očekávanému formátu nebo pravidlům (např. zda jsou e-maily, čísla atd.). Použijte funkce jako…
is_email()、ctype_digit()Nebo regulární výraz. - Čištění: Před uložením dat do databáze nebo jejich použitím k jiným účelům je nutné odstranit nebezpečné nebo nepotřebné části. Pro různá data je třeba použít odpovídající funkce pro čištění, například
sanitize_text_field()(Použito pro text)sanitize_email()(Použito pro e-mailové adresy)intval()(Používá se pro celá čísla.) - Escape: Při výstupu dat do HTML, JavaScriptu nebo URL se ujistěte, že jsou bezpečně zakódovány, aby se zabránilo útokům typu cross-site scripting (XSS). Použijte funkce jako například
esc_html()、esc_attr()、esc_url()和wp_kses()。
Například při ukládání a výstupu možností pozdravů, které jsme vytvořili dříve:
// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
$sanitized = [];
if ( isset( $input['greeting'] ) ) {
// 清理文本输入
$sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
}
return $sanitized;
}
// 在前台输出问候语时
function myplugin_display_greeting() {
$options = get_option( 'myplugin_options' );
$greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
// 在输出到HTML前进行转义
echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
} Implementace podpory internacionalizace
Aby váš plugin mohl být používán uživateli po celém světě, je nutné podporovat internacionalizaci (i18n). To znamená, že všechny textové stránky určené pro uživatele musí být uloženy do funkcí pro překlad, aby je bylo možné přeložit do jiných jazyků.
WordPress používá framework GNU gettext. Klíčové funkce pro překlad jsou… __()(Used to obtain the translated string) a and _e()(Jedná se o text určený k výstupu po překladu.) Pro svůj plugin musíte nastavit jedinečný textový domén (Text Domain), který již byl definován v hlavičce pluginu.
V kódu byste to měli používat následovně:
// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );
// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );
// 带占位符的翻译
printf(
__( '欢迎,%s!', 'my-greeting-plugin' ),
esc_html( $username )
); Poté můžete použít nástroje, jako je Poedit, k extrakci těchto řetězců z kódu a jejich následnému vytvoření. .pot Šablony souborů – překladatelé mohou na základě nich vytvářet verze dokumentů v různých jazycích. .po 和 .mo Soubor a umístěte jej do pluginu. /languages/ V adresáři.
Závěr
Vývoj pluginů pro WordPress je silný a flexibilní obor, který umožňuje vývojářům hluboce přizpůsobovat a rozšiřovat funkce WordPressu. Začínáme pochopením základní struktury pluginů a systému hooků, pokračujeme vytvářením interaktivních uživatelských rozhraní a dodržováním přísných bezpečnostních a internacionalizačních standardů. Každý krok je klíčový pro vytvoření kvalitních, udržovatelných a populárních pluginů. Nezapomeňte, že podstatou je využívat bohaté API poskytované WordPressem, nikoli jej obejíždět. Díky modulárnímu uspořádání kódu, pečlivému zpracování dat a zohlednění podpory více jazyků hned od počátku bude váš plugin nejen funkčně výkonný, ale také bezpečný, profesionálně vyvinutý a schopen dosáhnout mezinárodního úspěchu.
Časté dotazy
Kolik souborů musí mít minimálně WordPress plugin?
Pro jeden plugin je potřeba minimálně jediný PHP soubor. Pokud tento soubor obsahuje správné poznámky týkající se hlavičky pluginu (Plugin Header Comment), WordPress jej bude schopen identifikovat a aktivovat v seznamu pluginů v pozadí. Tento jediný soubor může obsahovat veškerý kód potřebný pro fungování pluginu.
Jak zabránit konfliktům mezi názvy pluginů a jinými pluginy?
Aby se předešlo konfliktům mezi názvy funkcí, tříd nebo konstant a názvy jiných pluginů nebo temat, měli byste používat jedinečné předpony. Obvykle může tato předpona vycházet z názvu vašeho pluginu nebo z jeho zkratky. Například, pokud se váš plugin jmenuje “Awesome Slider”, můžete použít předponu „AS“. as_ 或 awesome_slider_ Jako předpona pro všechny funkce a třídy. Pro názvy tříd lze zvážit jedinečnější strukturu ve stylu jmenných prostorů.
Jak provést čištění dat v databázi při odinstalování doplňku?
WordPress nabízí dvě možnosti pro úklid po odinstalování pluginů. První z nich spočívá v registraci odinstalačního háčku (uninstall hook), který můžete definovat ve svém hlavním pluginovém souboru. register_uninstall_hook() Funkce určuje callback funkci pro odstranění datových tabulek a nastavení vytvořených pluginem. Druhý, a také doporučenější způsob, je vytvoření samostatného… uninstall.php Soubor. Když uživatel odstraní plugin prostřednictvím administrace WordPressu, WordPress automaticky spustí kód obsažený v tomto souboru. V tomto souboru je třeba zkontrolovat konstanty. WP_UNINSTALL_PLUGIN Zda bylo dané nastavení definováno, a poté všechna data týkající se pluginů bezpečně smazána.
Jak mám přidat soubory JavaScript a CSS do svého pluginu?
Měl byste použít funkce fronty (queues) poskytované WordPressem k správnému přidávání skriptů a stylových souborů, místo jejich přímého výstupu do HTML kódu. <script> 或 <link> Tagy. Pro zdroje na straně klienta (front-end) se používají… wp_enqueue_script() 和 wp_enqueue_style() Funkce a jejich připojení k wp_enqueue_scripts Na akčních hookech. Pro zdroje v administračním rozhraní se provádí jejich montáž (připojení). admin_enqueue_scripts Na háčku. To zajišťuje správné zpracování závislostí a předchází opakovanému načítání stejného zdroje.
Jak provádět ladění při vývoji doplňků (pluginů)?
Nejprve se ujistěte, že ve vašem… wp-config.php V souboru je zapnut režim ladění WordPressu. WP_DEBUG Konstanta je nastavena na trueMůžete také všechno zapnout současně. WP_DEBUG_LOG(Zaznamenat chyby do souboru) a WP_DEBUG_DISPLAY(Chyba se zobrazí na obrazovce.) Použijte… error_log() Funkce zaznamenává vlastní informace o ladění do serverového logu chyb. K ladění JavaScript a AJAX požadavků lze také využít konzoli a síťového panelu nástrojů pro vývojáře v prohlížeči. U složitější logiky lze zvážit použití profesionálních nástrojů pro ladění PHP, jako je např. Xdebug.
Jaký je další krok? Co bych měl udělat dál?
Další čtení a praktické znalosti
Následující obsah souvisí s tématem tohoto článku a je vhodný k dalšímu prostudování. Obvykle je lepší začít čtením článku, který je nejblíže vašemu aktuálnímu problému, a poté postupně přecházet k souvisejícím tématům.
- Jak vybrat a přizpůsobit si dokonalý WordPress téma?
- Průvodce vývojem WordPress pluginů: Vytvořte si svůj první vlastní plugin od nuly
- Co je to WordPress subtema?
- Jak stát se vývojářem WordPress pluginů: Kompletní průvodce od začátku
- Od nuly k jedné: Kompletní průvodce a praktické tipy pro vytvoření profesionální webové stránky pomocí WordPressu.