Vývoj WordPress pluginů pro začátečníky

Úvod do vývoje WordPress pluginů
WordPress pluginy jsou modulární rozšíření, která rozšiřují funkčnost WordPressu bez úpravy základního kódu. S více než 60 000 pluginy v oficiálním WordPress repozitáři je ekosystém pluginů jedním z hlavních důvodů, proč je WordPress nejpoužívanějším CMS na světě. Vývoj vlastních pluginů vám dává úplnou kontrolu nad funkcemi webu a umožňuje vytvářet řešení přesně na míru potřebám vašich klientů nebo vlastního byznysu.
Pro začátek vývoje WordPress pluginu potřebujete lokální vývojové prostředí nebo hosting s instalací WordPressu, znalost PHP na základní až střední úrovni a pochopení architektury WordPressu, zejména systému hooků. Nástroje jako Local by Flywheel, XAMPP nebo Docker usnadňují nastavení lokálního prostředí pro vývoj a testování pluginů před publikováním do produkce.
Struktura WordPress pluginu
Každý WordPress plugin začíná jediným PHP souborem se speciálním komentářem v hlavičce, který WordPressu říká, že jde o plugin. Tento komentář obsahuje název pluginu, popis, verzi, autora a další metadata. WordPress prochází adresář wp-content/plugins a čte tyto hlavičky, aby zobrazil seznam dostupných pluginů v administračním panelu.
Minimální struktura pluginu
Nejjednodušší plugin je jeden PHP soubor v adresáři wp-content/plugins se správnou hlavičkou. U vážnějšího pluginu se však doporučuje organizace ve vyhrazeném adresáři s hlavním souborem, adresářem includes pro pomocné třídy, adresářem admin pro administrační stránky, adresářem public pro frontendový kód a adresářem assets pro soubory CSS a JavaScript.
- plugin-name/plugin-name.php – hlavní soubor pluginu s hlavičkou a inicializací
- plugin-name/includes/ – PHP třídy a pomocné funkce
- plugin-name/admin/ – administrační stránky, nastavení, metaboxy
- plugin-name/public/ – frontendová funkčnost a šablony
- plugin-name/assets/css/ – CSS styly pro administraci i frontend
- plugin-name/assets/js/ – soubory JavaScript
- plugin-name/languages/ – soubory lokalizace a překladu
- plugin-name/templates/ – HTML šablony, které může téma přepsat
Používejte namespacy nebo prefixy u všech funkcí. V průvodci zabezpečením webu najdete další tipy a třídy, jak se vyhnout konfliktům s jinými pluginy. Například místo obecné get_settings() použijte beo_plugin_get_settings() nebo lépe PHP namespace BeoPlugin a třídy. To je zásadní, protože WordPress načítá všechny aktivní pluginy do stejného PHP scope a konflikty názvů vedou k fatálním chybám.
Systém hooků ve WordPressu
Systém hooků je srdcem architektury WordPressu a pochopení hooků je pro vývoj pluginů naprosto nezbytné. WordPress definuje stovky hooků v klíčových bodech procesu vykonávání kódu a pluginy se na ně napojují, aby svůj vlastní kód vykonaly ve správnou chvíli. Existují dva typy hooků: actions a filters.
Actions
Actions jsou hooky, které vám umožňují vykonat kód v konkrétním bodě procesu WordPressu. Například action init se spustí poté, co WordPress dokončí načítání, ale před odesláním jakéhokoli výstupu, wp_enqueue_scripts se spustí, když je třeba přidat soubory CSS a JS, a save_post se spustí při uložení příspěvku. Pro registraci své callback funkce na konkrétní action hook použijte funkci add_action().
Filters
Filters jsou hooky, které vám umožňují upravit data dříve, než je WordPress použije nebo zobrazí. Callback funkce filtru přijme hodnotu, upraví ji a vrátí upravenou verzi. Například filtr the_content vám umožňuje změnit obsah příspěvku před zobrazením, the_title mění titulek a filtr wp_mail umožňuje upravit e-mailové zprávy před odesláním. K registraci filter callbacků použijte add_filter().
- add_action('hook_name', 'callback', priority, args) – registruje funkci na action hook
- add_filter('hook_name', 'callback', priority, args) – registruje funkci na filter hook
- do_action('custom_hook') – vytvoří váš vlastní action hook, který mohou jiné pluginy využít
- apply_filters('custom_filter', $value) – vytvoří váš vlastní filter hook
- remove_action() / remove_filter() – odstraní dříve registrovanou funkci
Parametr priority (výchozí 10) určuje pořadí vykonávání, když je na stejný hook registrováno více funkcí. Nižší číslo znamená dřívější vykonání. To je užitečné, když chcete, aby se váš kód vykonal před nebo po kódu jiného pluginu na stejném hooku. Vždy explicitně definujte priority, pokud na pořadí vykonávání záleží, protože výchozí hodnota může vést k nepředvídatelným výsledkům.
Tvorba administračních stránek
Většina pluginů vyžaduje administrační stránky pro konfiguraci nastavení. WordPress poskytuje Settings API pro tvorbu stránek nastavení, které se integrují do administračního panelu WordPressu. K přidání hlavní položky menu použijte add_menu_page() nebo add_submenu_page() k přidání podstránky pod existující položku menu.
Settings API
WordPress Settings API automatizuje ukládání a validaci nastavení pomocí tabulky options ve WordPressu. Nastavení registrujete pomocí register_setting(), sekce definujete pomocí add_settings_section() a pole pomocí add_settings_field(). WordPress pak automaticky vygeneruje formulář, uloží data a aplikuje sanitizaci. Je to bezpečnější přístup než ruční zpracování POST požadavků, protože Settings API automaticky přidává ověření nonce a kontrolu oprávnění uživatele.
Pro složitější administrační rozhraní můžete místo Settings API použít vlastní administrační stránky s vlastním HTML a JavaScriptem. V takovém případě použijte hooky wp_ajax_ pro AJAX volání a nezapomeňte přidat ověření nonce pomocí wp_nonce_field() a check_admin_referer() pro ochranu před CSRF útoky. Na začátku každé administrační stránky a AJAX handleru také kontrolujte oprávnění uživatele pomocí current_user_can().
Příklad administračního menu
V praxi vyžaduje tvorba administrační stránky dva kroky. Nejprve zaregistrujete položku menu na hooku admin_menu pomocí add_menu_page s parametry pro titulek stránky, titulek menu, požadované oprávnění (obvykle manage_options pro administrátory), slug stránky, callback funkci, která vykreslí HTML, a volitelně ikonu. Poté v callback funkci vygenerujete HTML stránku s formulářem pomocí settings_fields() a do_settings_sections() pro automatické vykreslení registrovaných nastavení.
Tvorba shortcodů
Shortcody umožňují uživatelům vložit funkčnost vašeho pluginu přímo do obsahu příspěvků a stránek pomocí krátkých značek v hranatých závorkách. Shortcode zaregistrujete funkcí add_shortcode(), která přijímá název shortcodu a callback funkci. Callback přijme atributy zadané uživatelem, obsah mezi otevírací a uzavírací značkou a samotný název shortcodu.
Příklad implementace
Představte si tvorbu pluginu pro zobrazení členů týmu. Shortcode [team_member name="Marko" role="Developer" photo="url"] by zobrazil stylizovanou kartu s fotografií, jménem a rolí člena týmu. Callback funkce přijme pole $atts, použije shortcode_atts() k definici výchozích hodnot a vrátí HTML řetězec s naformátovaným zobrazením. V callbacku shortcodu nikdy nepoužívejte echo, ale vždy vracejte řetězec, protože echo narušuje pořadí zobrazení obsahu na stránce.
- Samouzavírací shortcode – [button text="Klikni" url="/odkaz"] – bez obsahu mezi značkami
- Obklopující shortcode – [highlight]důležitý text[/highlight] – má obsah mezi značkami
- Vnořené shortcody – do_shortcode($content) v callbacku pro podporu vnořování
Aktivace, deaktivace a odinstalace
WordPress poskytuje tři hooky pro události životního cyklu pluginu. register_activation_hook() se volá, když uživatel plugin aktivuje, a tam obvykle vytváříte databázové tabulky, nastavujete výchozí nastavení a registrujete cron úlohy. register_deactivation_hook() se volá při deaktivaci, kde uklízíte časovače a dočasná data, ale ponecháváte data, protože uživatel může plugin znovu aktivovat.
Pro trvalé odstranění dat při odinstalaci použijte register_uninstall_hook() nebo soubor uninstall.php v kořenovém adresáři pluginu. Zde mažete tabulky z databáze, odstraňujete options z tabulky wp_options a uklízíte všechna data, která plugin vytvořil. Tyto hooky vždy implementujte, protože plugin, který po odinstalaci ponechá data v databázi, je špatnou praxí zbytečně zabírající zdroje a znečišťující databázi.
Bezpečnost a osvědčené postupy
Bezpečnost je při vývoji pluginů kritická, protože zranitelný plugin může kompromitovat celou instalaci WordPressu a všechny weby na stejném serveru. Vždy validujte a sanitizujte veškerý uživatelský vstup pomocí sanitize_text_field(), absint(), esc_url() a dalších sanitizačních funkcí WordPressu. Pro všechny databázové dotazy používejte prepared statements s $wpdb->prepare(), abyste předešli útokům typu SQL injection.
- Ověření nonce – wp_nonce_field() a wp_verify_nonce() pro ochranu před CSRF
- Kontrola oprávnění – current_user_can() před každou privilegovanou akcí
- Escapování výstupu – esc_html(), esc_attr(), esc_url() pro všechna dynamická data v HTML
- Prepared statements – $wpdb->prepare() pro všechny dotazy s uživatelskými daty
- Validace nahrávání souborů – kontrola MIME typu, velikosti souboru a přípony
- Ochrana před přímým přístupem – defined('ABSPATH') || exit; na začátku každého PHP souboru
Dodržujte WordPress Coding Standards pro konzistentní a čitelný kód. Pro všechny řetězce, které uživatel vidí, používejte internacionalizační systém WordPressu s funkcemi __() a _e(), aby bylo možné váš plugin přeložit do dalších jazyků. Plugin testujte se zapnutým WP_DEBUG, abyste odhalili všechny chyby a varování před publikováním. Zvažte psaní PHPUnit testů pro kritickou logiku pluginu, protože automatizované testy předcházejí regresím při aktualizacích.
BeoHosting Team
10+ let zkušeností — Specialisté na webhosting a infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Naposledy aktualizováno: