Není třeba se ptát, proč by někdo chtěl napsat plugin pro WordPress. Jedná se o jednu z hlavních funkcí, díky nimž je WordPress tak flexibilní a vhodný pro širokou škálu projektů. v první část naší série vytvořili jsme základnu pro plugin WordPress, který je rozpoznatelný jádrem. Pak, v druhá část jsme se naučili, jak změnit výchozí funkci jádra. Dnes se podíváme na možnosti pluginu. Jedná se o jednu z nejběžnějších úkolů, které musí pluginy provádět.

Běžně budete muset vytvořit sadu parametrů (možností) a dát uživateli možnost přiřadit jim odpovídající hodnoty. Hodnoty jsou uloženy v databázi a lze je na vyžádání načíst. Plugin zpravidla provede různé akce založené na těchto hodnotách, například produkuje různé výstupy.

Jaké nástroje vám WordPress dává k tomu, aby tento scénář byl možný? Umožňuje nám zaregistrovat možnosti se systémem a načíst je pomocí přiřazeného ID - za to odpovídá API pro volby. WordPress také obsahuje rozhraní API pro nastavení pro vytvoření administrátorského grafického rozhraní pro volby dialogů. Kromě toho nám dovoluje přidávat vlastní položky do admin menu tak, aby plugin mohl mít vlastní stránku nastavení. WordPress se konečně postará o zabezpečení zásuvných modulů a poskytuje řadu funkcí a metod čištění, které bezpečně zpracují vstup uživatele.

Podívejme se podrobně na každou část.

Možnosti API

The Možnosti API je standardní způsob ukládání vlastních dat v databázi. Veškerá data jsou uložena v tabulce wp_options pod daným uživatelským jménem a mohou být přístupná někde v kódu. Nejdůležitější funkce rozhraní API jsou:

Funkce get_option jednoduše vytáhne z databáze všechny informace uložené pod daným jménem a vrátí je. Funkce update_option přebírá název možnosti a její hodnotu a aktualizuje odpovídající položku v databázi. Pokud takový záznam neexistuje, bude automaticky vytvořen. Obě funkce mohou pracovat s poli i s jednotlivými hodnotami. To znamená, že ukládat data pole pod jedním jménem v databázi a API zvládne serializaci a mineralizační akce pro vás. To je doporučená praxe pro pluginy: uložit všechny možnosti pluginu jako pole pod jedním jménem.

Možnosti pluginu "

V admin menu můžete vytvořit stránku s nastavením nebo skupinu stránek pro plugin. Pokud vytváříte skupinu stránek, měli byste nejprve přidat stránku nejvyšší úrovně:

Hodnoty parametrů jsou samozřejmé, ale můžete se obrátit na zdroj pro detaily. Nyní musíte postupně přidávat interní stránky následujícím způsobem:

Jako parametr $ parent_slug musíte použít ID stránky na nejvyšší úrovni - v případě vlastní stránky nejvyšší úrovně je to hodnota, kterou jste zadali jako $ menu_slug při registraci. Pokud nepotřebujete několik stránek, můžete vytvořit jednu stránku nastavení v rámci jedné ze stávajících sekcí nejvyšší úrovně - obvykle pod položkou "Nastavení" (volba-general.php by měla být použita jako $ parent_slug). Případně existují funkce zkratky pro přidání podstrán pod některými položkami admin menu, v případě "Nastavení" je to add_options_page () .

API pro nastavení

The API pro nastavení umožňuje vytvářet rozhraní pro správu nastavení pluginu; označte stránku jako stránku s nastavením (pro automatické zpracování vstupu) a výstupní sekce na této stránce a pole uvnitř každé sekce pro přijetí uživatelského vstupu. Chcete-li dosáhnout toho, že prvním cílem je zaregistrovat nastavení systému a vytvořit strukturu polí sekcí pro ně:

Odkazovat na Kodex pro podrobný popis parametrů, ale logika je poměrně jednoduchá: nejprve zaregistrujeme název naší volby (pokud existuje spousta možností, mohou být uspořádány do skupin); pak registrujeme sekce (oddíly) s interním ID a sadou polí pro každou sekci; rozhraní API nám umožňuje zadat vlastní zpětná volání pro ověření vstupu a pro zobrazení jednotlivých polí a částí.

Po registraci našich voleb a příslušných polí je musíme je zobrazit na stránce s nastavením - v rámci těchto funkcí je třeba volat následující funkce

štítek:

Funkce settings_fields se postará o povinné skryté pole pro fungování mechanismu volitelných funkcí WordPress. Do_settings_sections skutečně vygeneruje dříve registrované oddíly a pole.

Bezpečnostní úvahy

Základním bezpečnostním pravidlem při řešení možností je velmi jednoduché: vyčistit vstup, uniknout výstupu a postarat se o schopnosti. Jinými slovy, pokud akceptujete vstup od uživatele, musíte zkontrolovat, zda je jeho formát správný a zda neobsahuje škodlivý obsah (to je validace), poté můžete údaje předat k dalšímu zpracování. Při zobrazování dat extrahovaných z databáze by mělo uniknout výstupu speciálních znaků (zejména HTML) správně. Pro obě úkoly WordPress poskytuje nativní funkce, které lze použít v různých kontextech (přečtěte si více o tématu tady ).

Dalším bodem zájmu jsou oprávnění uživatelů. WordPress má vestavěný mechanismus řízení rolí a funkcí uživatelů, který blokuje přístup do určitých administrátorských oblastí pro uživatele s nedostatečnými oprávněními. Pouze administrátoři jsou všude povoleni. Při vytváření stránek možností je třeba jim přiřadit správné funkce (obvykle to je 'manage_options') a neumožňují uživatelům s nízkými oprávněními přístup na stránku (další informace o rolích a schopnostech WordPress naleznete v tématu Kodex ).

Dejte vše do práce

Podívejme se na celý scénář v akci.

Budeme pokračovat ve vývoji našeho příkladu "Hello World" (který byl zahájen v předchozích částech série), který zobrazuje informace autora hosta pod příspěvkem pomocí vlastní taxonomie.

Autorské blokové značení bylo předtím pevně zakódováno do pluginu. Nyní udělíme uživateli možnost zadat šablonu pro danou značku pomocí zástupných znaků pro data specifická pro autora (název, adresa URL a popis). Náš plugin již obsahuje dva soubory PHP: core.php (obsahující hlavní kód) a admin.php (obsahující kód související s administrátory).

Jaké změny musíme udělat?

1. Vytvořte stránku možností pluginů (v souboru admin.php)

/* register menu item */function msp_helloworld_admin_menu_setup(){add_submenu_page('options-general.php','Helloworld Settings','Helloworld','manage_options','msp_helloworld','msp_helloworld_admin_page_screen');}add_action('admin_menu', 'msp_helloworld_admin_menu_setup'); //menu setup/* display page content */function msp_helloworld_admin_page_screen() {global $submenu;// access page settings$page_data = array();foreach($submenu['options-general.php'] as $i => $menu_item) {if($submenu['options-general.php'][$i][2] == 'msp_helloworld')$page_data = $submenu['options-general.php'][$i];}// output?>

'return $ actions;} add_filter (' plugin_action_links ',' msp_helloworld_settings_link ', 2, 2);

V tomto úryvku msp_helloworld_admin_menu_setup vytvoří podstránku v nabídce "Nastavení" (měla by být spuštěna na akčním háčku "admin_menu", aby fungovala správně). Poté vygenerujeme formulář s msp_helloworld_admin_page_screen. Využívá funkce rozhraní API pro nastavení polí a předem vytvořených funkcí aplikace WordPress pro další prvky rozhraní (například tlačítko Odeslat). Všimněte si atributu akce

tag: měl by ukazovat na 'options.php' pro správné zpracování voleb. Nakonec filtr msp_helloworld_settings_link vytvoří odkaz na stránku možností na obrazovce správy pluginů.

2. Zaregistrujte možnosti systému pluginem a vytvořte pro ně pole a pravidla

/* register settings */function msp_helloworld_settings_init(){register_setting('msp_helloworld_options','msp_helloworld_options','msp_helloworld_options_validate');add_settings_section('msp_helloworld_authorbox','Author's box','msp_helloworld_authorbox_desc','msp_helloworld');add_settings_field('msp_helloworld_authorbox_template','Template','msp_helloworld_authorbox_field','msp_helloworld','msp_helloworld_authorbox');}add_action('admin_init', 'msp_helloworld_settings_init');/* validate input */function msp_helloworld_options_validate($input){global $allowedposttags, $allowedrichhtml;if(isset($input['authorbox_template']))$input['authorbox_template'] = wp_kses_post($input['authorbox_template']);return $input;}/* description text */function msp_helloworld_authorbox_desc(){echo "

Enter the template markup for author box using placeholders: [gauthor_name], [gauthor_url], [gauthor_desc] for name, URL and description of author correspondingly.

";}/* filed output */function msp_helloworld_authorbox_field() {$options = get_option('msp_helloworld_options');$authorbox = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$authorbox = esc_textarea($authorbox); //sanitise output?>

Měl bych zdůraznit, že všechny možnosti pluginu by měly být uloženy jako pole. Navzdory skutečnosti, že máme pouze jednu možnost (autorbox_template), zahrneme ji do pole a odpovídající pole do sekce pro demonstrační účely. Registrační funkce msp_helloworld_settings_init by měla být provedena na háku 'admin_init'. Funkce msp_helloworld_options_validate se stará o vstup uživatele tak, že jej vyčistí natívným wp_kses_post filtr, který závisí na knihovně KSES. Funkce msp_helloworld_authorbox_desc vytvoří popis části oddílu formuláře a msp_helloworld_authorbox_field vytvoří textarea pro zpracování vložené značky. Všimněte si, že k nim přidělujeme třídy CSS "velký textový kód", takže je použita vestavěná stylová správa.

To vše vytváří následující obrazovku v administrátorském panelu aplikace WordPress.

3. Upravte funkci, která vypíše autorské pole (v souboru core.php)

Děláme to tak, že získává šablonu z databáze a nahrazuje data zástupného symbolu ([gauthor_name], [gauthor_url], [gauthor_desc]) s odpovídajícími hodnotami.

/* Create author's box markup */function msp_helloworld_author_block(){global $post;$author_terms = wp_get_object_terms($post->ID, 'gauthor');if(empty($author_terms))return;$name = stripslashes($author_terms[0]->name);$url = esc_url(get_term_link($author_terms[0]));$desc = wp_filter_post_kses($author_terms[0]->description);//get template from option$options = get_option('msp_helloworld_options');$out = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$out = str_replace(array('[gauthor_url]', '[gauthor_name]', '[gauthor_desc]'),array($url, $name, $desc),$out);return $out;}

Konečně náš plugin (po použití některých stylů) vytváří příjemné hostské autorské pole pod obsahem příspěvku.

Závěr

Uložení a přístup k volitelným datům je velmi běžný úkol, který je třeba provést spoustou pluginů. Díky mechanismu možností můžete svým uživatelům poskytnout možnost naladit plugin podle svých potřeb (což jistě ocení). Dokonce i vyvíjející se pro sebe, možná budete potřebovat způsob, jak ukládat detaily konkrétní instalace. Spoléhat se na nativní rozhraní WordPress API a funkce při řešení těchto úkolů je dobrým způsobem, jak vytvořit udržitelný, bezpečný a budoucí kód.

Jaké pluginy byste chtěli vidět pro WordPress? Vytvořili jste svou vlastní sérii? Dejte nám vědět v níže uvedených komentářích.

Vybrané snímky používají obrázek modulu přes Shutterstock