20.03.2015 | Tomáš Kocifaj
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 nějaká data ukládali a získávali tak informace od uživatele. Určitě jsou ale situace, kde bude potřeba do metaboxu předat pouze nějaké HMTL, které chceme uživateli vykreslit. I na tuto potřebu Framework myslí, my se na ní v dnešním dílu podíváme.
/yours/requires/metaboxes/kt_fw_{post_type}_metabox.inc.php
post_type nahradíme typem post_typu, ke kterému metaboxy budou patřit.
Do našeho souboru kt_fw_test_page_metabox.inc.php – který jsme si definovali v předchozích dílech – přidáme následující kód:
|
1 2 3 4 5 6 7 8 |
// ...náš předchozí kód z minulého dílu KT_Metabox::createCustom( "id-naseho-custom-metaboxu", // Identifikátor metaboxu "Ručně obsluhovaný metabox", // Titulek meatboxu KT_Custom_Metaboxes_Page::getCustomMetaboxPageScreenName("kt-test-page"), // Na jaké stránce se má zobrazit - náš slug "kt_fw_test_page_custom_metabox_callback" // Název callback funkce ); |
V rámci statické třídy na objektu KT_Metabox jsme využili funkci createCustom, která na rozdíl od ostatních provádí vytváření metaboxu s vlastní callback funkcí – ta bude volána v případě vykreslení právě daného metaboxu. Ostatní parametry jsou velmi podobné.
V případě, že zadáte callback funkci, která zatím nebyla definovaná, bude vyhozena běžná chyba! Custom metabox musí mít vždy callback funkci deklarovanou.
Nyní vzniká otázka, kam bychom měli callback funkci pro náš metabox zapisovat. V případě, že máte těchto funkcí v rámci entity / nebo nastavení více, je dobré pro ně vyčlenit vlastní soubor. Například v našem případě bychom ho zapisovali do /yours/requiers/funcionts/kt_fw_test_page_metabox_functions.inc.php. Pokud se ale jedná o pár funkcí, které nemají složitou strukturu, můžeme je ponechat v našem souboru pro zápis metaboxu.
Pod naší definici metaboxu přidáme další část kódu.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
KT_Metabox::createCustom( "id-naseho-custom-metaboxu", "Ručně obsluhovaný metabox", KT_Custom_Metaboxes_Page::getCustomMetaboxPageScreenName("kt-test-page"), // Na jaké stránce se má zobrazit - náš slug "kt_fw_test_page_custom_metabox_callback" ); function kt_fw_test_page_custom_metabox_callback(){ echo "<p>Zde nechceme žádné vstupy, ale námi definovaný obsah v podobě HTML</p>"; // Mohu zde například zobrazit uložená data v nastavení $form = new KT_Form(); // Založím formulář $form->addFieldSetByObject(KT_FW_Test_Page_Config::getContactFieldset()); // Přidám do něj fieldset $form->loadDataFromWpOption(); // Načtu data z tabulky wp_options echo $form->getInputsDataToTable(); // Data zobrazím } |
Když si nyní obnovíme naší stránku, můžeme vidět náš nový metabox s obsahem, který jsme mu v rámci naší funkce určili vykreslit. V našem případě tedy jednu větu a poté obsah fieldsetu z našeho configu. Namísto vykreslení inputů jsme do formuláře data načetli a vykreslili je jako informativní tabulku. Je však ale na Vás, jaký obsah ve funkci vydefinujete.
Tímto způsobem můžete kontrolovat obsah každého metaboxu, který chcete pro zobrazení dat používat. Je již plně na Vás, co do připraveného obsahu metaboxu připravíte, jaké data tam pošlete a necháte vykreslit.
Občas určitě nastane situace, kdy potřebujete například zpracovat nějaké odeslané data z Vašeho formuláře a nechcete, aby byly součástí ostatních dat, které ukládá Framework dle definovaného tipu metaboxů. Například, budete chtít mít metabox, který v případě uložení provede nějakou operaci a Vy potřebujete vyčíst, co si uživatel „nastavil“.
Obecně máme dvě možnosti
Myslím, že 1. možnost je zcela jasná, pro tu druhou použijeme definovaný filtr ze strany frameworku
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$sreenName = KT_CUSTOM_Metabox_Page::getCustomMetaboxPageScreenName("kt-test-page"); add_filters("kt-custom-metabox-save-$screenName", "kt_fw_custom_metabox_save_function_callback"); function kt_fw_custom_metabox_save_function_callback( $saveResult ){ // Provedeme zpracování $_POST a uložení dat. if($errorPriZpracovani){ $saveResult[KT_Custom_Metabox_Base::SAVE_RESULT_KEY] = false; return $saveResult; } // Pokud je vše v pořádku, odešleme zpět výsledek zpracování return $saveResult; } |
Nyní, bude funkce kt_fw_custom_metabox_save_fuction_callback volána vždy (a pouze), když bude docházet k načtení naší stránky se slugem kt-test-page. Akce se ale provede ještě předtím, než WordPress pošle hlavičku do prohlížeče. V případě, že odešleme ve výsledku false, funkce neprovede redirect stránky, ale pouze jí znovu vykreslí pro případ, že je potřeba vypsat například nějakou notifikaci o neprovedení akce a v proměnné $_POST zůstaly data, která uživatel vyplnil.
Hotovo! Právě jsme se naučili používat třetí tip metaboxu s možností vlastního callback funkce pro zobrazení námi definovaného obsahu.
Pokud si někdo není jistý, co to metabox je, rádi bychom udělali malou rekapitulaci. Metabox je ve WordPressu blok, který…
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…
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…
Odebírejte novinky z FW
Sledujte nás!
Follow @ktstudiocz!