05.03.2015 | Tomáš Kocifaj
Pokud si někdo není jistý, co to metabox je, rádi bychom udělali malou rekapitulaci. Metabox je ve WordPressu blok, který patří nějaké stránce v rámci administrace. Často je napojen na funkční entitu – například na příspěvek. S metaboxy určitě pracoval každý, kdo s WordPressem kdy pracoval. Jsou to ony „boxy“, do kterých vyplňujete data, vybírat rubriku, zadáváte štítky nebo vybíráte náhledový obrázek. To všechno jsou jednotlivé metaboxy. V dnešním tutoriálu si ukážeme, jak lehce a snadno s nimi můžeme pracovat v rámci frameworku.
Komponentu, kterou budeme pro tuto práci hlavně využívat bude KT Metabox. Tato komponenta nám umožňuje velké možností automatických procesů, které lze využít. Obecně framework dělí metaboxy do několika skupin.
V tutoriálu si postupně projdeme všechny typy – včetně toho, jak s nimi snadno a efektivně pracovat. V dnešním díle se podíváme na nejčastěji používaný POST_META
Metaboxy obecně zapisujeme do:
/yours/requires/metaboxes/kt_fw_{post_type}_metabox.inc.php
post_type nahradíme typem post_typu, ke kterému metaboxy budou patřit.
Proto, abychom mohli využít datový typ POST_META – je potřeba mít připravený nějaký formulář, pomocí kterého zadáme nové informace, které potřebujeme u daného post_typu uložit. Protože již framework počítá (díky datovému typu meatboxu) s tím, že se bude jednat o formulář, bude nám v tomto případě stačit vytvořit pouze fieldset.
Fieldsety se definují do souboru s configem. Název configu by měl být vždy totožný s tím, jaké entitě patří. V našem případě se tedy bude jednat o soubor kt_wp_fw_post_config.inc.php.
Do souboru s configem vytvoříme definici fieldsetu:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class KT_WP_FW_Post_Config { const POST_FIELDSET = "kt-wp-fw-post-fieldset"; // Název (ID) fieldsetu const POST_FIELDSET_FIELD_1 = "kt-wp-fw-post-field-1"; // ID našeho fieldu const POST_FIELDSET_FIELD_2 = "kt-wp-fw-post-field-2"; // ID dalšího fieldu const POST_FIELDSET_FIELD_3 = "kt-wp-fw-post-field-3"; // ... public static function getPostFieldset(){ $fieldset = new KT_Form_Fieldset( self::POST_FIELDSET, __("Náš první vlastní metabox", KT_DOMAIN), // Titulek fieldsetu (přebírá také metabox) __("Toto je popisek našeho prvního metaboxu, který si uživatel může u každého metaboxu přečíst", KT_DOMAIN) ); $fieldset->addText(self::POST_FIELDSET_FIELD_1, __("Text", KT_DOMAIN)); // Přídáme intpu typu "text" $categoryManager = new KT_Taxonomy_Data_Manager(KT_WP_CATEGORY_KEY); $fieldset->addSelect(self::POST_FIELDSET_FIELD_2, __("Výběr rubriky")) // Select s výběrem ID rubriky ->setDataManager($categoryManager); $fieldset->addSwitch(self::POST_FIELDSET_FIELD_3, __("Ano/Ne?")); // Přepínač ANO / NE return $fieldset; } } |
Nyní provedeme vytvoření metaboxu a jeho napojení na post_type typu příspěvek. Pro tento účel nám bude sloužit následující kód, který umístíme do souboru kt_wp_fw_post_metaboxe.inc.php – viz výše.
|
1 2 3 4 5 6 7 8 9 |
if(is_admin()){ KT_Metabox::create( KT_WP_FW_Post_Config::getPostFieldset(), // Načtema náš fieldset z configu KT_WP_POST_KEY, // Říkáme, že metabox patří k post_type = "post" KT_MetaBox_Data_Type_Enum::POST_META // Datový typ pro uložení dat do wp_postmeta ); } |
Nyní, když si obnovíme editor příspěvku, uvidíme náš nový metabox:
Nyní je důležití vědět, že o uložení a editaci dat v metaboxu se již stará framework. Nemusíte řešit žádné zpracování dat, jejich načítání do formuláře nebo jiné zapeklité postupy. Máme hotovo.
Takových to metaboxů můžete vytvořit libovolně mnoho – se všemi různými fieldy, které Vám framework nabízí. Všechny data jsou poté dostupné v tabulce na wp_postmeta pod klíčem, jehož název jsme definovali jako konstantu v configu, kde jsou jednotlivé parametry fieldů a fieldsetu samotného.
Framework bude také provádět automatickou validaci dat, kterou si případně u fieldu vynutíte. Můžete tak snadno kontrolovat obsah, který Vám tam správce webových stránek bude předávat.
Napřed je potřeba definovat další fieldset v configu. V configu nám také přibude statická funkce, která nám bude vracet kolekci všech fieldsetů, které chceme takto hromadně přidávat.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
class KT_WP_FW_Post_Config { public static function getAllFieldset(){ return $fieldsetCollection = array( self::POST_FIELDSET => self::getPostFieldset(), self::POST_SECOND_FIELDSET => self::getSecondPostFieldset() ); } const POST_FIELDSET = "kt-wp-fw-post-fieldset"; const POST_FIELDSET_FIELD_1 = "kt-wp-fw-post-field-1"; const POST_FIELDSET_FIELD_2 = "kt-wp-fw-post-field-2"; const POST_FIELDSET_FIELD_3 = "kt-wp-fw-post-field-3"; public static function getPostFieldset(){ $fieldset = new KT_Form_Fieldset( self::POST_FIELDSET, __("Náš první vlastní metabox", KT_DOMAIN), __("Toto je popisek našeho prvního metaboxu, který si uživatel může u každého metaboxu přečíst", KT_DOMAIN) ); $fieldset->addText(self::POST_FIELDSET_FIELD_1, __("Text", KT_DOMAIN)); $categoryManager = new KT_Taxonomy_Data_Manager(KT_WP_CATEGORY_KEY); $fieldset->addSelect(self::POST_FIELDSET_FIELD_2, __("Výběr rubriky")) ->setDataManager($categoryManager); $fieldset->addSwitch(self::POST_FIELDSET_FIELD_3, __("Ano/Ne?")); return $fieldset; } const POST_SECOND_FIELDSET = "kt-wp-fw-post-second-fieldset"; const POST_SECOND_FIELD_1 = "kt-wp-fw-second-field-1"; const POST_SECOND_FIELD_2 = "kt-wp-fw-second-field-2"; const POST_SECOND_FIELD_3 = "kt-wp-fw-second-field-3"; public static function getSecondPostFieldset(){ $fieldset = new KT_Form_Fieldset( self::POST_SECOND_FIELDSET, __("Náž druhý metabox", KT_DOMAIN), __("Popisek našeho druhého metaboxu s tímto fieldsete", KT_DOMAIN) ); $fieldset->addTextarea(self::POST_SECOND_FIELD_1, "Textarea") // Textarea ->setRows(10); $fieldset->addMedia(self::POST_SECOND_FIELD_2, "Obrázek"); // Načtení obrázků / souboru z mediální knihovny $fieldset->addWpPage(self::POST_SECOND_FIELD_3, "Stránka"); // Selectobx s výběrem ID stránky return $fieldset; } } |
Nyní trochu změníme kód, v našem souboru s metaboxem. Namísto statické funkce create použijeme funkci createMultiple.
|
1 2 3 4 5 6 7 8 9 |
if(is_admin()){ KT_Metabox::createMultiple( KT_WP_FW_Post_Config::getAllFieldset(), // Místo jednoho předáváme kolekci fieldsetů KT_WP_POST_KEY, KT_MetaBox_Data_Type_Enum::POST_META ); } |
Nyní, když se podíváme na editaci našeho příspěvku vidíme, že se naše skupina metaboxů zase rozrostla.
Hotovo. Právě jste provedli implementaci dvou metabxů na základě definovaných fieldestů, které se vždy uloží příslušnému příspěvku do tabulky wp_postmeta.
Tento díl nám ukáže, jak je možné vytvářet vlastní typy obsahu – mimo databázovou strukturu. Velmi často nastává situace, kdy…
V minulém díle jsme si ukázali, jak snadno přidat metabox k post typům – ať už nativním v rámci WordPressu…
V předchozích dílech jsme si ukázali, jak snadno a rychle vytvořit metabox, jak do něj umístit prvky formuláře proto, abychom…
Odebírejte novinky z FW
Sledujte nás!
Follow @ktstudiocz!