Při vývoji pro WordPress často záleží na úspěchu nebo neúspěchu vývoje pluginů na tom, zda jsou dobře využity silné funkce poskytované jádrem WordPressu. Tato kapitola se zaměří na několik nejzákladnějších a nejčastěji používaných API pluginů, podrobně rozebírá jejich scénáře použití, parametry a metody, aby pomohla vývojářům vytvářet stabilní, efektivní a snadno udržovatelné pluginy.
Core actions and filter hook functions
Architektura pluginů pro WordPress je založena na systému “hooků”, který umožňuje vývojářům vstupovat s vlastními funkcemi v určitéch okamžicích běhu jádra WordPress. Porozumění a správné použití těchto hookových funkcí je prvním krokem při vývoji pluginů.
Připojení vlastní funkce k jádru procesů WordPress
Funkce pluginů musí být spuštěny ve správný okamžik, a to obvykle pomocí mechanismu “akcí” (actions) v WordPressu.add_action Funkce slouží jako most mezi pluginy a základním životním cyklem aplikace; umožňují vývojářům spouštět vlastní kód v okamžiku, kdy dojde k určitým událostem. remove_action Slouží k odstranění akcí, které již byly nasazeny (tj. které byly spuštěny nebo provedeny).
Doporučujeme k přečtení. Průvodce vývojem WordPress pluginů: Vytvořte si svůj první plugin od nuly。
Základní syntaxe je následující:
add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ) Například po zveřejnění obsahu článku pošlete informační e-mail:
function send_post_notification( $post_id ) {
// 发送邮件的逻辑
}
add_action( 'publish_post', 'send_post_notification' ); add_action Parametr prioritity určuje pořadí provádění více callback funkcí na stejném hooku – čím menší je číslo, tím dříve se funkce spustí. To je zásadní pro složité pluginy, u kterých je nutné kontrolovat pořadí jejich provádění.
Modifikovat data předávaná jiným funkcím nebo jejich výstup.
Kromě spouštění kódu v určitých okamžicích často potřebují vývojáři upravovat data generovaná jinými funkcemi, a právě v takových případech se používají filtrovací háčky.add_filter Funkce slouží k přidání filtrovacího callbacku; přijímá vstupní data a po úpravě musí data vrátit.
Například: změna posledního znaku v nadpisech všech článků.
Doporučujeme k přečtení. Zvládněte tyto WooCommerce háky a filtry a přizpůsobte funkce svého e-commerce webu.。
function modify_post_title( $title ) {
return $title . ' - 我的网站';
}
add_filter( 'the_title', 'modify_post_title' ); 与 add_action Podobně…add_filter Podporují také nastavení priorit a počtu parametrů. Filtry jsou základem pro vysoce personalizovanou implementaci v WordPressu.
Funkce pro práci s databází a správu možností
Pluginy obvykle potřebují trvalé uložení dat. WordPress poskytuje hierarchické API pro správu dat – od jednoduchých nastavení webové stránky až po operace s vlastními databázovými tabulkami.
Bezpečné ukládání a načítání nastavení pluginů
Pro pluginy, které potřebují uchovávat uživatelská nastavení, je nutné uložit konfigurační parametry do databáze WordPress.add_option、get_option 和 update_option Tvoří základ pro správu dat. Tyto funkce pracují s… wp_options Tabulky jsou vhodné pro ukládání relativně jednoduchých dat ve formátu klíč-hodnota.
Nejprve lze použít… add_option Přidejme počáteční hodnotu… wp_options Tato funkce vkládá data pouze v případě, že daná volba neexistuje.
add_option( 'my_plugin_api_key', '', '', 'no' ); // ‘no’表示非自动加载 K získání hodnot možností se používá… get_optionDoporučujeme vždy poskytovat výchozí hodnoty:
$api_key = get_option( 'my_plugin_api_key', '' ); // 第二个参数为默认值 Pro aktualizaci hodnot možností se použije… update_optionPokud daná možnost neexistuje, bude automaticky vytvořena.
Doporučujeme k přečtení. Ultimátní průvodce vývojem pluginů pro WordPress: Vytvoření profesionálních rozšíření od nuly。
update_option( 'my_plugin_api_key', 'new_secret_key_123' ); Pro úlohy ukládání složitých dat, jako jsou pole nebo objekty, tyto funkce automaticky provádějí serializaci a deserializaci.
Provedení vlastního dotazu do databáze
Když potřebuje plugin ukládat relační data nebo protokoly, je obvykle lepší volbou vytvořit vlastní databázové tabulky. V tomto případě je nutné pracovat přímo s abstrakčními třídami databáze WordPress. $wpdb Interakce umožňuje bezpečný a standardizovaný způsob přístupu k databázím.
Nejprve v hooku pro aktivaci pluginu vytvořte tabulku. Ujistěte se, že používáte správný formát a název tabulky. dbDelta Funkce slouží k bezpečnému vytvoření nebo aktualizaci struktury tabulky. Porovnává rozdíly mezi stávající a cílovou strukturou tabulky a inteligentně aplikuje potřebné změny.
global $wpdb;
$table_name = $wpdb->prefix . 'my_plugin_orders';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
customer_email varchar(100) NOT NULL,
amount decimal(10,2) NOT NULL,
order_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY customer_email (customer_email)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql ); Při provádění dotazů na data je nutné použít… $wpdb->prepare Příprava příkazů pomocí určitých metod je klíčová pro prevenci útoků typu SQL injection:
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}my_plugin_orders WHERE order_date > %s AND amount > %f",
'2026-01-01 00:00:00',
100.00
)
); Function for content generation and output
Pluginy mohou běžet nejen v pozadí, ale co je důležitější, mohou také generovat obsah určený pro návštěvníky webové stránky. WordPress poskytuje silné funkce, které umožňují bezpečný a flexibilní výstup HTML kódu, zpracování šablon (shortcodes) a správu statických zdrojových souborů.
Vložení dynamického obsahu do článků a stránek
Shortcodes umožňují uživatelům vkládat dynamický obsah do článků a stránek pomocí jednoduchých značek a představují klíčovou funkci pro zlepšení použitelnosti pluginů. add_shortcode Funkce – můžete snadno vytvořit svůj vlastní krátký kód.
add_shortcode Funkce přijímá dva parametry: zkrácený kódový tag a funkci pro zpracování. Funkce pro zpracování musí vrátit HTML obsah, nikoli jej přímo vypsat, což odpovídá principu WordPressu “nejprve načti, poté zobraz”.
add_shortcode( 'recent_posts', 'my_plugin_render_recent_posts' );
function my_plugin_render_recent_posts( $atts ) {
// 解析属性,设置默认值
$attributes = shortcode_atts( array(
'count' => 5,
'category' => ''
), $atts );
// 根据属性查询文章逻辑...
$output = '<ul class="recent-posts">';
// ... 生成列表项
$output .= '</ul>';
return $output;
} Uživatel si stačí v editoru napsat požadovaný text. [recent_posts count="3"] Poté se zobrazí seznam nejnovějších článků.
Bezpečně vypsat hodnotu proměnné do HTML
Když potřebuje plugin zobrazit proměnné na stránce (např. text získaný z databáze nebo nastavení), může je použít přímo. echo Při spojování řetězců může existovat riziko cross-site scripting (XSS). WordPress poskytuje speciální funkce pro eskalaci dat, které zajišťují bezpečnost výstupních informací.
Pro výstup uvnitř atributů HTML značek se používá… esc_attr Funkce:
echo '<input type="text" value="' . esc_attr( get_option( 'site_title' ) ) . '">'; Pro výstup uvnitř obsahu HTML značek se použije… esc_html:
echo '<h1>'`. esc_html($post_title).`'</h1>'; Pro HTML obsah, jehož bezpečnost již byla potvrzena (např. po provedení určitých ověřeních… wp_kses_post Filtrováno, ale je potřeba vypsat celý URL. Pro to lze použít… esc_url:
echo '<a href="/cs/' . esc_url( $external_link ) . '/">odkaz (na webové stránce)</a>'; V bloku kódu JavaScript je nutné použít speciální způsob, abyste mohli vypsat hodnotu proměnné z PHP. Pro to můžete využít funkci `eval()`. Tato funkce vyhodnotí uvedený string a vrátí výsledek. Před použitím `eval()` však musíte být opatrní, protože to může představovat bezpečnostní riziko, pokud wp_json_encode A také v kombinaci s… esc_js:
<script>
var pluginSettings = <?php echo wp_json_encode( $settings_array ); ?>;
var message = '<?php echo esc_js( $user_message ); ?>';
</script> Funkce pro zpracování souborů a médií
Mnoho pluginů se zabývá nahráváním souborů, zpracováním obrázků nebo přístupem k interním souborům temat (templates) a pluginů. WordPress zakrývá složitou logiku serverových cest a URL adres a poskytuje sadu jednoduchých API (Application Programming Interfaces).
Získání absolutní cesty k interním zdrojům pluginu nebo tématu
Při vývoji pluginů je často nutné odkazovat na soubory CSS, JavaScript nebo obrázky umístěné ve vlastním adresáři. Používání pevně zakódovaných absolutních pathů je velmi nebezpečné, protože webové stránky mohou být přesunuty na jiné místo. WordPress nabízí plugin_dir_path 和 plugins_url Funkce slouží k dynamické generování cest (pathů).
plugin_dir_path Zadejte cestu k souborovému systému serveru, který obsahuje adresář s pluginy; cesta musí končit složkou (/). Tato informace je vhodná pro… include 或 require Soubor:
$config_path = plugin_dir_path( __FILE__ ) . 'config/config.php';
if ( file_exists( $config_path ) ) {
require_once $config_path;
} 而 plugins_url Slouží k vytvoření URL adres, které lze přistupovat prostřednictvím prohlížeče, a je vhodné pro použití v…
或 Zdroj citovaný v textu:
$css_url = plugins_url( 'assets/css/admin-style.css', __FILE__ );
wp_enqueue_style( 'my-admin-style', $css_url ); Pro vývojáře tematických sad (theme developers) je odpovídající funkcí… get_template_directory_uri 和 get_stylesheet_directory_uri。
Zpracování mediálních souborů nahrávaných uživateli
Pokud plugin umožňuje uživatelům nahrávat soubory, nikdy je nesmíme používat přímo. $_FILES Globální pole a… move_uploaded_file Funkce. Funkce pro zpracování médií v WordPressu wp_handle_upload Poskytuje kompletní integraci bezpečnostních kontrol a správy souborů.
Tato funkce automaticky zpracovává kontrolu typu souboru, přejmenovávání souborů (zabraňuje přepsání stávajících souborů), zpracování chyb a přesouvá soubory do struktury adresářů mediální knihovny WordPress.
$uploadedfile = $_FILES['my_plugin_upload'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && ! isset( $movefile['error'] ) ) {
// 文件上传成功
$file_url = $movefile['url'];
$file_path = $movefile['file'];
// 可以将 $file_url 存入数据库
} else {
// 上传失败,输出错误信息
echo $movefile['error'];
} Pro další integraci nahraných souborů do mediální knihovny WordPress lze také použít… wp_insert_attachment Funkce vytváří přílohy k příspěvkům, čímž je možné využít vestavěné funkce pro zpracování obrázků v WordPressu (např. vytváření miniatur).
Závěr
Znalost základních funkcí a metod WordPressu je základem pro efektivní a bezpečné vývoj doplňků (pluginů) a temát (themes). Začněte s systémem hooků (hook system).add_action, add_filterImplementovat modulární strukturu a provádět operace s databází.$wpdb, get_optionZajistit trvalou uložení dat a poté jejich výstup ve formě obsahu.add_shortcode, esc_html) a bezpečné zpracování (wp_handle_uploadKaždá skupina funkcí poskytuje pro konkrétní scénář dobře ověřená řešení, která byla vytvořena po dlouhém vývoji. Vývojáři by měli důkladně pochopit parametry, návratové hodnoty a osvědčené postupy použití těchto funkcí, aby se vyhnuli zbytečnému opakování stejných kroků nebo vzniku bezpečnostních chyb. Díky tomu mohou vytvořit rozšíření pro WordPress, která jsou jak výkonná, tak i spolehlivá.
Časté dotazy
Jaký je zásadní rozdíl mezi funkcemi `add_action` a `add_filter`?
Hlavní rozdíl mezi těmito dvěma prvky spočívá v jejich účelu a očekávaném chování funkce na zpátky (callback function).add_action Slouží k provedení určité operace v okamžiku, kdy dojde k určité události. Její callback funkce obvykle nevrací žádnou hodnotu, ale pouze provede určitou logiku (např. odešle e-mail, zaznamená do logů atd.). add_filter Slouží k “úpravě určitých dat” a jejich callback funkce musí přijmout vstupní hodnotu a vrátit upravenou hodnotu. Z technického hlediska jsou totožné, ale rozdíl v semantice činí kód čitelnějším.
Proč je při použití třídy $wpdb nutné použít metodu prepare?
$wpdb->prepare Metody jsou klíčovou obrannou linii proti útokům typu SQL injection. Přijímají proměnné pomocí placeholderů (%s pro řetězce, %d pro celá čísla, %f pro desetinná čísla) a zajišťují, že tyto proměnné jsou před vložením do SQL příkazů správně eskalovány a formátovány. I když jste si jisti, že zdroj proměnných je bezpečný (např. pochází z… get_option(...) a použijte prepare Je to také dobrý zvyk, kterému je třeba dodržovat, neboť zajišťuje, že kód zůstane stabilní i v případě budoucích změn nebo složitých situací.
Mohou být funkce `esc_html` a `esc_attr` použity vzájemně nahrazující?
I když v některých jednoduchých případech výměna těchto funkcí nemusí okamžitě způsobit chyby, doporučujeme to rozhodně nedělat. Tyto dvě funkce jsou optimalizovány pro různé HTML kontexty.esc_html Slouží k escapeování obsahu uvnitř HTML značek; tedy k přeměně určitých znaků na takové, které lze bez problémů zobrazit v webových prohlížečích. <、>、&、"、' Například znaky „“ se přemění na HTML entity. esc_attr Je určeno speciálně k escapeování hodnot uvnitř atributů HTML značek a zvládá také situace, kdy mohou být hodnoty atributů uzavřeny do uvozovek. Použitím správné funkce je zajištěno bezpečné escapeování ve všech možných případech.
Co znamená konstanta FILE v proměnné plugin_dir_path(FILE)?
FILE Jedná se o PHP „magickou“ konstantu, která reprezentuje úplnou cestu a název souboru, ve kterém se aktuálně spouští skript v souborovém systému. Může být použita v hlavním souboru pluginu. plugin_dir_path(FILE)Lze dynamicky a přesně získat absolutní cestu k adresáři tohoto pluginu, bez ohledu na to, kde je plugin nainstalován. To je mnohem spolehlivější než použití pevně zakódovaných cest a zajišťuje přenositelnost pluginu v různých serverových prostředích. Při vývoji témat jsou podobné konstanty velmi užitečné. DIR nebo funkce get_template_directory() Hrají stejnou roli.
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.
- Podrobný rozbor WooCommerce: Vytvoření výkonného e-shopu na WordPressu od nuly
- Předmluva: Proč zvolit WordPress pro vývoj
- Co je to WordPress subtema?
- Od nuly: Celý proces vývoje moderních WordPress temat a osvědčené postupy
- Kompletní průvodce vývojem pluginů pro WordPress: Od základů až po pokročilé návody na vytváření profesionálních rozšíření