WordPress – tvorba šablony od A do Z – 10.díl – Meta Box


V minulém díle našeho seriálu jsme si ukázali, jak vytvoříme vlastní produkty. WordPress nám zajisté nabízí základní parametry, jako je titulek, rubrika (které jsme si také založili), ale co když budeme chtít u produktů třeba vlastní cenu? Ano, můžeme jí vepsat do editačního pole, ale to zajisté není to pravé ořechové. Dnes si tedy ukážeme, jak přidat produktům vlastní formulář a dávat vlastnímu typu obsahu své vlastní parametry. Jdeme na to…

Admin část – založení MetaBoxu

Pojem Meta Box nám ve WordPressu znamená box, který je plovoucí v rámci admin části. V přiloženém obrázku můžete vidět, jaké Meta Boxy má WordPress v základu. Níže dodaný box se SEO informacemi je už náš vlastní metabox, který si dnes vytvoříme a ukážeme, jak z něj data ukládat a následně z DB Vyčítat.

 

meta_box

 

K založení prázdného Meta Boxu nám pomůže WordPress funkce – add_meta_box(). Funkce má řadu parametrů, které definují různé vlastnosti našeho Boxu. Funkce pro založení by vypadala následovně:

 


<?php
add_meta_box('kt-seo-box', 'SEO parametry stránky', 'PageKtSeoBox', 'produkty', 'normal', 'default');
?>

 

Udané parametry funkce jsou následující – popořadě
$id = kt-seo-box – ID MetaBoxu.
$title = SEO parametry stránky – titulek (zobrazuje se v hlavičce metaboxu).
$callback = PageKtSeoBox – jaká funkce se v Metaboxu zavolá.
$post_type = produkty – Na jakém post_type se bude MetaBox zobrazovat.
$context = normal – parametr říká, jak se bude meta box zobrazovat – Vice ve WP codexu u funkce.
$priority = ‚high‘, ‚core‘, ‚default‘, ‚low – Upřednostnění jednoho boxu před druhým.

Jak vidíte, WordPress nabízí velmi slušnou kontrolu nad založením vlastního Metaboxu. Nyní si ukážeme, jak metabox dostat k samotnému post_typu a přidat do něj vlastní formulář.

Soubor pro vlastní MetaBox

Doporučuji založit si nový soubor – Třeba kt_seo_box.php a do něj vložíme následující kód. Soubor pak stačí includnout do functions.php


<?php

add_action('add_meta_boxes', 'KtSeoBox');

function KtSeoBox(){
	add_meta_box('kt-seo-box', 'SEO parametry stránky', 'pageSeoBoxShow', 'produkty', 'normal', 'default');
}

function pageSeoBoxShow(){ 
global $post ?>

	<table>
		<tr>
			<td>Titulek stránky:</td>
			<td><input type="text" name="kt_data[kt_seo_title]" size="50" value="<?php echo get_post_meta($post->ID, 'kt_seo_title', true); ?>" id="kt_seo_title"></td>
		</tr>
		<tr>
			<td>Popisek stránek:</td>
			<td><input type="text" name="kt_data[kt_seo_desc]" size="50" value="<?php echo get_post_meta($post->ID, 'kt_seo_desc', true); ?>" id="kt_seo_desc"></td>
		</tr>
		<tr>
			<td>Klíčové slova:</td>
			<td><input type="text" name="kt_data[kt_seo_keys]" size="50" value="<?php echo get_post_meta($post->ID, 'kt_seo_keys', true); ?>" id="kt_seo_keys"></td>
		</tr>
	</table>

<?php }

add_action('save_post', 'save_data_seo_box');

function save_data_seo_box($post_id){

	if(isset($_POST['kt_data'])) :
		foreach ($_POST['kt_data'] as $key => $value) {
			if($value != '') update_post_meta($post_id, $key, $value);
		}
	endif;
}

?>

 

V samotném souboru jsme použili několik novinek, tak si to pěkně popořádku vysvětlíme:

add_action(‚add_meta_boxes‘, ‚KtSeoBox‘); – Tímto říkáme, že při vykreslování metaboxů v admin části chceme zavolat funkci KtSeoBox, kterou máme hned níže.

KtSeoBox – Zde si založíme náš potřebný metabox a jako callback function si zavoláme funkci pageSeoBoxShow().

pageSeoBoxShow() – Tato funkce už neudělá nic jiného, než že vepíše obsah do našeho Metaboxu. V našem případě tedy formulář s třemi inputy.

add_action(‚save_post‘, ‚save_data_seo_box‘); – Zde naopak WordPressu říkáme, že při uložení postu chceme zavolat funkci save_data_seo_box().

save_data_seo_box() – Zde jsem vytvořil jednoduchý foreach, který projede všechny data v poli $_POST[‚kt_data‘] a nad každým záznem v poli zavolá funkci update_post_meta(), kde jako klíč bude název inputu a hodnota jeho příchozí value

update_post_meta() – Tato funkce nám už ukládá data do databáze. Jedná se o jednoduchou strukturu, kde je v DB uložen Klíč a hodnota. Ikdyž se funkce jmenuje update_… WordPress sám zjistí, zda se jedná o nový údaj provede inzert nebo údaj přepisujeme a volá updat dotaz. Stejně tak pak používáme funkci get_post_meta(), kde jako parametr udáváme ID postu, klíč a zda chceme vrátit hodnotu nebo pole.

Validace formuláře v MetaBoxu

Tady se dostáváme do trochu prekérní situace, kde je třeba myslet na logiku samotného WP, jak data ukládá a posílá. Je to trochu složitější a komplexnější problém a myslím, že bude vhodné mu věnovat jeden celý díl. V případě vlastních šablon a vlastního webu není potřeba data validovat (aspoň já to nedělám, protože vím, co do inputu patří a co ne-e), ale pro případné zákazníky už je třeba validaci provádět.

Závěrem

Dnes jsme si ukázali další rozšíření našich produktů o vlastní údaje. Nezapomínejte, že Metaboxů můžete založit libovolně mnoho. Můžete je volat dle přihlášeného uživatele (tedy, můžete vytvářet nastavení produktu pro admina a třeba spolupracovníka). V Metaboxu nemusí být pouze form, ale text, nápověda, obrázek, sada informací se statistikou atd. Díky rozložení údaju do Více Metaboxů pak dáváte uživateli možnost si je různě skládat, skrývat, přendavat a vytvářet si vlastní pracovní prostředí.

V dalším díle se podíváme na validaci formulářů, které si do MetaBoxů budeme vkládat.

 

Tomáš Kocifaj, KTStudio.cz

, , ,

  1. #1 duskohu 3.2.2014 - 17:18

    Ahoj, Dakujem za clanok. Velmi by ma zaujimalo ako data validovat, resp. ako stopnut ukladanie postu ked data v metaboxe nie su validne a ako vypisat error mesage. Vedel by si ma nejako nasmerovat?

  2. #2 Tomáš Kocifaj 3.2.2014 - 17:59

    Zdravím tě, validace formulářů v administraci WordPressu není zase tak jednoduchá věc. Vývojáři s tím moc nepočítají (není tam toho moc co validovat – aspoň pro ně) a tak tam na to vyloženě připravený nástroj není.

    Je několik cest, jak to řešit:
    1. Odchytávat data v akci save_post kde jsou poslaná data k dispozici v $_POST a pokud není validní udělat wp_die() s vypsanou chybou. Uživatel musí dát pak „zpět“ a formulář je stále vyplněn daty a uložení neproběhlo.

    2. Nevalidní data uložit do $_SESSION nechat WordPress dokončit save, redirect a následně vypsat error message a v metaboxu označit ty data, která jsou v $_SESSION a upozornit na ně nějakou hláškou, že tyto data nejsou validní a nebyla uložena.

    3. Validaci provádět pomocí Javascriptu. Na událost onClick na update button spustit validační funkci, která při zjištění chyby zruší akci postu a zobrazí chybu u inputu

    4. Ta nejlepší cesta – dělat to pomocí Javascriptu a ještě k tomu jeden z bodů 1 a 2 – tedy udělat kontrolu i na serveru.

    Snad jsem pomohl :-) Zde už to není moc o WP ale o znalosti PhP nebo Javascriptu (případně jQuery). Zde u nás už nastoupila tvrdá ruka php programátora ;-)

  3. #3 duskohu 3.2.2014 - 19:14

    -1 pre vyvojarov
    +1 pre teba za navrh riesenia,
    Dakujem

  4. #4 liborrr 14.3.2014 - 08:40

    Perfektní popis tvorby šablony, jen tento díl mne donutil být ve střehu o kus déle, ale už jede – je tu několik otazníků navíc před input, potom v pageSeorBoxShow je navíc písmeno „r“ a dovolím si doplnit že include do functions.php na tento soubor lze vložit takto: get_template_part(‚kt_seo_box‘); – jsem úplný začátečník WP a chvíli mi trvalo než jsem se trefil, tak pto ostatní.

  5. #5 liborrr 14.3.2014 - 09:07

    tak jsem jásal předčasně, při uložení jsem na této hlášce:

    Warning: Cannot modify header information – headers already sent by (output started at /data/web/virtuals/13870/virtual/www/domains/wp.holia.cz/wp-content/themes/it/functions.php:97) in /data/web/virtuals/13870/virtual/www/domains/wp.holia.cz/wp-admin/post.php on line 233

    Warning: Cannot modify header information – headers already sent by (output started at /data/web/virtuals/13870/virtual/www/domains/wp.holia.cz/wp-content/themes/it/functions.php:97) in /data/web/virtuals/13870/virtual/www/domains/wp.holia.cz/wp-includes/pluggable.php on line 896

  6. #6 Tomáš Kocifaj 14.3.2014 - 09:17

    Zdravím tě Libore,

    děkuji za postřeh, chybné „r“ jsem již opravil. Většinou se snažím psát návody tak, aby z nich byl jasný záměr a nejednalo se pouze o Copy \ Past tutoriál, kdy člověk ani neví, proč se tak dělo nebo proč jsem tuto část napsal zrovna takto.

    get_template_part() je funkce jako každá jiná. To znamená, pokud místo include nebo require_once použiješ get_template_part, tak ve funkce jsou přístupné pouze ty proměnné, které si tam založíš. Ostatní je ti odepřeno. Proto se někdy vyplatí použít klasické php funkce, které pouze „vloží“ část jiného kódu do dalšího. A hlavně, už z názvu funkce je jasné, že by se mělo jednat o nějaká část templaty a ne o vnitřní funkčnost šablony :-)

    K tvé chybě – Cannot modify header information – tato chyba je vyvolána tehdy, když pošleš do prohlížeče nějaká data již poté, co jsi odeslal php hlavičku. Zkontroluj si, zda tam něco „neechuješ“, „vardampuješ“ či něco podobného – to bývá často chyba u mě, když ladím aplikaci :-)

  7. #7 liborrr 14.3.2014 - 14:32

    Děkuju za odpověď, hlavně rychlost :-)

    Ano, ač používám copy paste, tak tento návod jedu popořadě a dokud mi alespoň v kostce není jasné co dělám a neotestuju, nejdu dál. Znám a používám jiné systémy a každý má něco, WP se mi líbí čím dál víc na určité typy stránek, které se zrovna chystám dělat. (Asi bych tu neměl problém čapnout hotovou šablonu, přestylovat a vymalováno, ale mám chuť alespoň kousek víc pochopit.)

    Nejsem žádnej phpčkář, občas něco okopíruju, okoukám a použiju, tady si ale nevím rady. Ať použiju get_template nebo include(‚kt_seo_box.php‘); chyba je stejná, jen to hlásí malinko něco jiného wp-content/themes/it/kt_seo_box.php:45

    Mám čistou instalaci WP a jedu jen šablonu podle tohoto návodu (do díl 10), takže nevím, že bych tam někde něco posílal navíc. Dělá mi to při ukládání produktu, ať dám něco do seo boxu nebo nedám.

    Ještě, když zkusím do kt_seo_box.php cokoli napsat echem, tak vidím snahu, že to vloží do hlavičky úplně na začátek. A to všude, ne jen u produktu.

    No peru se s tím a teď mi to přestalo chybu vyhazovat samo od sebe, cache? chyba na hostingu? Možná tam něco přidal editor? Dělal jsem vyjjímečně v pspadu a teď opravy dělal v notepadu++ a tváří se ok.

    Teď také vidím, že v hlavičce mám pod css celé stránky znovu načtené, budu hledat dál.

    • #8 Tomáš Kocifaj 14.3.2014 - 16:09

      Zdravím, potom ti pravděpodobně uvízla prázdná mezera nebo dostavec za znaky ?> které ukončuje PhP. Doporučuji v souboru kde je pouze php kód tyto ukončovací značky nepoužívat.

  8. #9 liborrr 15.3.2014 - 22:21

    Tak chyba s css byla, že header nenašel v relativní cestě style.css a vypisoval předpokládám proto index.php. Doplněna kompletní cesta přidáním proměnné v php a ok.

    Další chybu mám ve functions.php. Respektive vůbec v extistenci tohoto souboru. Pokus je přítomen přesouvá mi celou hlavičku do body, proto zřejmě ta chybová hlášká o header information. I když functions.php nechám prázdné, stejně mám celou hlavičku v body. Už mi nějak dochází nápady proč. Pokud soubor smažu, je vše ok.

    Mohu poprosit o radu / nakopnutí?

    • #10 Tomáš Kocifaj 16.3.2014 - 07:34

      Opět tě zdravím, velmi dobře zkontroluj, zda ve functions.php není něco zapsané – třeba prázdný znak nebo odstavec mimo php kód. Některé editory tyto mezery nemusí vůbec zobrazovat, ale když to pak php překládá, tak na to může narazit a hází právě tu chybu. Poukud jsi na úvodní stránce, volá se vždy index.php – kde by měla být vložena header.php pomocí funkce get_header() – jiné automatické volání WordPress nevytváří.

  9. #11 liborrr 16.3.2014 - 11:51

    Děkuju za reakci, ale smazal jsem functions.php a vytvořil ho znovu úplně prázdný. UTF8, notepad++ (dělám v něm léta a bez problému), výsledek stejný, navíc vidím, že nevypíše deklaraci a zbytek hlavičky je opět v body.
    Po smazání souboru vše v pořádku. Napadá mne nějaké nastavení v trvalé odkazy apod, ale tam už jsem také měnil. Ještě budu hledat, ale dochází mne nápady.

  10. #12 liborrr 16.3.2014 - 20:44

    Poslední zoufalý pokus, vše znovu, poue čtyři soubory v šabloně:
    header – jen deklarace doctype, start html, head pouze s title, start body
    footer – jen konec body a konec html
    index – jen nacteni header, slovo „text“, nacteni footer
    functions – jen slovo „text“
    a přesto to neběží – jakmile je tam functions, nacpe se hlavička do body a deklarace doctype je fuč :-((( – jakmile smažu functions, vše ok.
    Hledal jsem googlem – našel jen odkaz na mezery před a po php, což nemám, přemýšlel jsem na .htaccess nebo nastavení base, ale když to vše jede v pořádku bez functions tak to asi špatně nebude. Mám poslední WP s češtinou, subdoména u wedosu – mám tam více webů na subdoméně v různých redakčních systémech a vše jede ok.
    Text, který mám ve functions se nacpe na úplný začátek stránek, takže místo headeru, i když jsem na home page.

  11. #14 liborrr 19.3.2014 - 21:36

    Tři dny hledání a hurá-našel jsem, kdyby se také někomu povedlo, návod co zafungoval je zde: http://wordpress.org/support/topic/warning-cannot-modify-header-information-headers-already-sent-by-output-1 – open it with notepad and save it as ANSI (it was UTF-8), prostě uložit v ANSI. Divné sice je, že jsem toto několikrát zkoušel a nepomohlo, no ale měnil jsem vždy kódování všech souborů v šabloně. Tentokrát jen functions a začalo to jet.
    Ještě jednou děkuju Tomášovi za ochotu pomoci a emailovou komunikaci.
    A samozřejmě za perfektní návod na šablonu.

  12. #15 liborrr 19.3.2014 - 21:55

    Tak radost byla předčasná. Sice už je header tam kde má být, ale díky kódování je špatná čeština a nejedou správně odkazy na produkty.
    Toto jsem snad také odstranil, zkopíroval jsem kód a přímo ve WP editaci šablony ho vložil – functions a kt_seo_box mi editor zobrazoval prázdný.
    Po otevření v externím editoru se soubor tváří jako ANSI as UTF8.

    • #16 Tomáš Kocifaj 20.3.2014 - 06:38

      Opět tě zdravím, to mi přijde nějaké divné. Takovéto problémy jsem nikdy neměl – snad ani v začátcích. Jsem teď trochu zavalen prací, proto reaguji takto pomalu. Klidně mi to zase pošli na email.

  13. #17 liborrr 20.3.2014 - 14:23

    Asi jsem to blbě napsal, ale už vše jede ok, prostě zlobilo kódování souborů, v notepad++ je třeba nastavit UTF8( bez BOM).
    ANSI i UTF 8 samotné dělalo blbosti. Také jsem se s tím ještě nikdy nesetkal, tak jen pokud by se povedlo někomu dalšímu, tak aby věděl, že i toto může být závada.
    Ještě jednou děkuju za ochotu.

    • #18 Vita 27.3.2014 - 15:27

      S tímhle jsem se kdysi hodně natrápil. Od té doby používám Sublime text 2 na kódování :)

    • #19 Tomáš Kocifaj 27.3.2014 - 15:28

      Také používám SublimText a na vývoj pak NetBeans ;-)

    • #20 Vita 27.3.2014 - 20:36

      Včem je NetBeans lepší, že ho střídáš za Sublime na vývoj? Mé na Sublime štve jen ta tabulka co každé desaté uložení vyskočí, že chcou peníze :) škoda že za to chcou tolik.

    • #21 Tomáš Kocifaj 28.3.2014 - 06:47

      NetBeans je již klasické IDE, Sublim je pouze textový editor. Takže NetBeans nabízí řadu nástrojů za účelem samotného vývoje. Našeptává funkce, funkce objektů, šikovně sepsané komentáře, popisky, atd. Popravdě kdo to myslí s vývojem trochu vážněji se bez dobrého IDE neobejde. Na trhu je NetBeans a PhPStrom od JetBrains. NetBeans jsou ale free :-) A hlavně jsem si na ně už zvykl a popravdě, kdo programuje v textovém editoru je masochista :-)

  14. #22 Vita 27.3.2014 - 15:31

    zkoušel jsem zadat neco do toho formuláře a kliknout na „Aktualizovat“ a data zmizela z formuláře, ale řekl bych že přes get_post_meta by se měly načíst zpět z DB do příslušného inputu :/ chjo…
    btw. pořád se v textu vyskytuje … předpokládám že je to trojtý překlep, nebo právě proto mi to nefunguje?

    • #23 Vita 27.3.2014 - 20:31

      Moje chyba… jedno podtržítko navíc :) to je tak vždycky.

  15. #24 Michal 28.8.2014 - 10:45

    Ahoj,
    postupuju podle tvého návodu a přidal jsem si další vlastní metabox, který vychází z toho tvého. Když ho připojím samotný, vše pracuje jak má, ale když tam připojím oba (tvůj i můj), pracuje správně jen ten první z nich. U toho druhého neproběhne update. Jako by neproběhlo add_action u metaboxu, který je druhý v pořadí…

    • #25 Tomáš Kocifaj 29.8.2014 - 06:55

      Ahoj Michale,

      mají metaboxy rozdílné ID? Je to první první parametr funkce add_meta_box(); Všechny meatboxy jsou následně uložené v php poli, kde právě toto ID je klíč. Pokud tedy do pole přijdou dva stejné klíče, jeden z nich se následně přepíše.

      • #26 Michal 4.9.2014 - 15:30

        Ano, ID je rozdílné, u tvého je id: ‚kt-seo-box‘ u mého ‚g-produkt-box‘., ale stejně to nejede, přejmenoval jsem všechny proměnné, u kterých si myslím, že to jde, ale nepomohlo nic.
        Taky jsem zkoušel dát do funkce add_meta_box do post_type array, aby se box zobrazil u více post_type, ale hází mi to chyby „illegal offset type“, „array_keys() epects parameter 1 to by array, null given“ a Invalid argument supplied for foreach(), všechno v šabloně template.php (řádky 2774 – 2817).
        Může být problém v tom, že to mám všechno na locale v XAMPPu ve výchozím nastavení?

        • #27 Tomáš Kocifaj 4.9.2014 - 15:35

          Zdravím Michale,

          problém určitě nebude na localhostu. Všechny projekty u nás tvoříme na localhostu. Určitě to nebude záležitost nastavení serveru.

          Můžeš sem poslat ten kód, který by měl daný meta_box založit?

          • #28 Michal 5.9.2014 - 07:05

            Mám to v samostatném souboru, který includuju do functions. Tvůj MetaBox jsem nijak neupravoval…

            add_action(‚add_meta_boxes‘, ‚GProduktBox‘);
            function GProduktBox(){
            add_meta_box(‚g-produkt-box‘, ‚Parametry produktu‘, ‚pageProduktBoxShow‘, ‚produkty‘, ‚normal‘, ‚default‘);
            }
            function pageProduktBoxShow(){
            global $post ?>

            Číslo produktu:
            <input type="text" name="g_data[g_produkt_id]" size="50" value="ID, ‚g_produkt_id‘, true); ?>“ id=“g_produkt_id“>

            // další položky formuláře

            $value) {
            if($value != “) {
            update_post_meta($post->ID, $key, $value);
            }
            }
            endif;
            }

    • #29 Tomáš Kocifaj 5.9.2014 - 07:31

      Ahoj Michale,

      podle toho co jsi poslal to vypadá na syntax chybu v inputu u value. Chybí tam kus PhP – pokud to tam máš, akorát to nepobral komentář, tak mi to pošli na kocifaj@ktstudio.cz – kouknu na to :-)

  16. #30 Pavel 21.11.2014 - 21:50

    Dobrý den,

    Chtěl jsem se zeptat je možně nějak udělat „interaktivní metabox“ .
    Přiklad: Chci metaboxi na seznam věcí ( Název, popis atd..) a nevím předm kolik těch věcí bude… .tak sem myslel jestli de že bych si zvolil třeba že těch vecí bude 10 a na základě toho by se mě zacyklily metaboxy … nvm jestli je to pochopitelné…prostě bych potřeboval abych si zvolil počet boxu při každem postu jinej a vždy se mě to podle toho nastavilo …

    • #31 Tomáš Kocifaj 22.11.2014 - 07:38

      Zdravím Vás, Pavle,

      je otázka, zda potřebujete dynamicky měnit metaboxy nebo pouze obsah v nejdnom z metaboxů. Ať tak nebo tak, určitě to lze. Vytváříme metaboxy pro různé formáty příspěvků nebo definované layouty stránek.

      Pokud se Vám jedná o různý počet metaboxů, v první řadě je potřeba udělat to, podle čeho jakou sadu metaboxů budete definovat. Například, vytvoříte jeden hlavní metabox, kde si člověk vybere určitou „kolekci“ meaboxů. Uloží Post a při vykreslováním bude kontrolovat, jakou kolekci si uživatel vybral a tu mu následně do prohlížeče pošlete.

      Je to už trochu vyšší dívčí, ale řešit to určitě lze. Vše se ale dělá pomocí běžné funkce add_meta_boxes() a následně několika podmínek, které rozhodnou o tom, co se má v danou chvíli zobrazit.

      • #32 Pavel 22.11.2014 - 21:15

        Takže to musím mýt ty meta boxy před připravené všechny nelze udělat jen jednu skupinu kterou bych pak pomocí cyklu nakopíroval.. a velikost toho cyklu bych nastavil v 1. metaboxu napr.

        Počet triček : 5
        a zobrazilo by se mě pod tím aniž bych musel něco aktualizovat 5 oddílu s určitýma metaboxema ( značka, velikost atdd… )

  17. #33 Radovan 27.1.2015 - 13:46

    Ahoj, nedarilo se mi pouzit vice metaboxu pro jednu stranku. Box se sice zobrazoval ale neukladal se obsah dalsiho boxu. Zkusil jsem tedy vyhodit tag FORM a uz neni problem. Muze to pusobit nejake potize?

    • #34 Tomáš Kocifaj 27.1.2015 - 13:49

      V metaboxu by žádný tag FORM být neměl. Ten tam doplňuje WordPress pro celou stránku včetně svých fieldů, které postem odesílá. Obecně tedy používáš zanoření Formulář ve formuláři, což je z logiky věci špatně.

  18. #35 Radovan 27.1.2015 - 13:58

    Dik za odpoved. Vychazel jsem z Tveho kodu(nahore):
    form method=POST id=kt_seo_data
    Nevim tedy jestli mame na mysli to same.

    • #36 Tomáš Kocifaj 27.1.2015 - 14:00

      Ano, to je špatně, uteklo mi to s nějakým rendrováním formuláře z objektu. Již jsem kód upravil.

  19. #37 JP 20.5.2015 - 11:56

    Skvělý návod. Jen jsem musel u inputu odstranit ty otázníky na začátku, jinak se mi formuláře v administraci nezobrazují. Proč tam jsou?

    Jak potom v šabloně můžu zobrazit nějakou hodnotu z formuláře z toho meta boxu? Chci si např. vytvořit meta box s formulářem, kde chci zadávat třeba cenu a tu následně zobrazit u produktu.

    • #38 Tomáš Kocifaj 20.5.2015 - 12:04

      Zdravím, na otázníky se podívám – možná jsem tam udělal nějakou drobnou chybu.

      Data uložena v post_meta se získávají pomocí funkce:
      get_poste_meta(„id-prispevku“, „nazev-klice-inputu“, true);

      Id příspěvku je většinou dostupné v globální proměnné $post,

      nazev-klice-inputu – to je často jméno Vašeho inputu – viz návod.

      True – to říká, že chcete vrátit rovnou hodnotu pro výpis.

  20. #39 JP 20.5.2015 - 15:03

    Tomáši, děkuji moc. Zkusím to a snad to bude fungovat. Děkuji za návod a odpověď.

Komentáře jsou uzavřeny.