Rubriky Vnitřní architektura, WordPress: Jak na to

Custom post type, custom fields a taxonomie jsou způsobem, jak z WordPressu vytvořit univerzální platformu

Jak jsem psal v tipu shortcody a widgety, WordPress dnes představuje platformu pro vytváření webových aplikací. Tento posun začal v okamžiku, kdy bylo k článku možné uložit rozšiřující informace a pracovat s nimi prostřednictvím univerzálních funkcí. A jsou jenom tři: uložit, načíst a smazat.

Vlastní pole, custom fields

Tyto rozšiřující informace se nazývají custom fields, uživatelská pole (dříve také post meta) a vděčíme jim za to, že se možnosti WordPressu v důsledku značně rozšířily, byť je tato funkce v podstatě triviální. Uložíte hodnotu ke konkrétnímu článku, pak ji můžete načíst a zobrazit, případně smazat. Vtip je v tom, že je to jednoduché, jde o atomickou vlastnost, jednodušší už to být nemůže. Takže je to stabilní a lze na tom stavět složitější struktury.

Dlouho ale chyběla možnost pro uživatele, jak by s hodnotami mohl kultivovaně pracovat. Zobrazoval se jen boxík, kde byl uložen název pole a jeho hodnota (ostatně ještě stále existuje). Programátorsky to bylo snadné, ale uživatelsky nikoliv. Následně se tedy objevily další funkce pro práci s metaboxy.

Metaboxy jsou rámečky, boxíky, které vidíte, když upravujete článek. Programátoři mohou vytvořit vlastní a umožnit tak uživateli, aby hodnoty pro uživatelská pole vkládal pohodlně. A tak jsme se dostali do fáze, kdy příspěvek přestal být příspěvkem a stal se datovým záznamem. A odtud byl krůček k další abstrakci – k vlastnímu typu článku.

Vlastní typ článku, custom post type

Standardně jsou ve WordPressu tyto typy článků: příspěvek, stránka, příloha (stránka, která se automaticky vytváří každému nahranému souboru). Mnoho pluginů si ale vytváří své vlastní typy článků, custom post type. Přiřadí k nim uživatelská pole a vytvoří tak zcela originální datový záznam, který se nejmenuje příspěvek ani stránka, nemusí obsahovat ani editor, ale naopak může obsahovat zcela nové položky. Jejich další výhoda spočívá v tom, že programátorsky se pracuje na určité abstraktní rovině a využívá se připravených funkcí. Programátor nevymýšlí žádné základní obslužné rutiny, využívá připravenou platformu. Dokonce si základní kód může nechat vygenerovat.

Uživatelská pole je možné samozřejmě přidávat k již existujícím článkům vlastního typu – a produkt ve WooCommerce je taky custom post type.
Takže ho lze tedy rozšířit o další parametry.

woocommerce_rozsireny_produkt
Woocommerce – rozšířený produkt

Vlastní řazení do kategorií, taxonomie

Posledním chybějícím prvkem byly vlastní typy kategorií. Když článek máte, potřebujete také nějaké rubriky. Vlastní, na míru. Říká se jim obecně taxonomie a jsou dvojího typu – stromové (kategorie) a plošné (štítky). Vše si ukážeme na příkladu.

Když se nyní podíváte zpětně na základní výbavu WordPressu, pak si uvědomíte, že článek typu příspěvek a stránka jsou jen jednou realizací vlastního typu článku (CPT), že nemají žádná uživatelská pole a že rubriky a štítky jsou jen jednou realizací vlastní taxonomie. Vývoj této části WordPressu prošel od konkrétního k abstraktnímu. Takže ho lze tedy rozšířit o další parametry.

Reálné příklady využití z mé dílny

Uvedené vlastnosti používám často a rád. Následují tedy příklady z praktických realizací pro zákazníky. Mohl bych pro práci využít některé z pluginů, jako je Advanced Custom Fields nebo framework jako Piklist, ale nedělám to. Má to své výhody i nevýhody, radši mám kód pod kontrolou a nezatěžuji web dalšími pluginy.

Katalog pro realitního makléře

Poměrně komplexní katalog nemovitostí, který je obsahuje podrobnou kartu každé nemovitosti a jeji kategorizaci (to jsou ony taxonomie) několika způsoby – podle typu nemovitosti, podle dispozic, podle oblasti a dále podle štítků. Propracované je také zobrazení nemovitosti, ale to už nesouvisí s tématem tohoto článku. Výsledek můžete vidět na webu Hledambyt.com.

Katalog nemovitostí - WordPress
Katalog nemovitostí – WordPress

Databáze odtažených vozidel pro Městskou policii Litoměřice

Při odtahu se SPZ vozidla zadá do databáze. Zapisovat smí pouze vybraní uživatelé, mazat smí zase uživatelé s patřičnými oprávněními. Jakmile si majitel přijde vozidlo vyzvednout, do záznamu je vloženo datum vydání a záznam se automaticky přesune do archivu. Na webu funguje vyhledávání podle SPZ/RZ.

katalog_vozidel_mepol
Vyhledávání podle SPZ/RZ
Tímto způsobem poměrně často vylepšuji weby zákazníků. Pak už jde spíše o aplikaci, protože data je možné exportovat, různě filtrovat nebo kombinovat. Samozřejmostí je napojení třeba na chytré formuláře, umím také propojovat funkce více pluginů.. zkrátka je to radost! 🙂

Autorem fotky je Ismas

Autor článku

Vlastimil Ott

Vlastimil Ott

Žiju WordPressem od roku 2006 a říkají mi, že jsem odborník na WordPress. Založil jsem firmu WP-admin.cz s.r.o., která poskytuje správu WordPress stránek pro firmy.
+420591141346
Opava

Tohle vás taky zaujme

8 komentářů u “Custom post type, custom fields a taxonomie jsou způsobem, jak z WordPressu vytvořit univerzální platformu

  1. Ahoj, uvedené příklady (katalog a vyhledávání) jsou vytvořené jen pomocí custom fields, custom post type a taxonomie? Rád bych něco podobného pro jednoho klienta také vytvořil, zatím jsem to řešil formou pluginů, ale zastávám také názor, že je lepší se pluginům vyhnout. A zobrazení nemovitostí v katalogu je teda uděláno jak? 🙂 díky

  2. Ahoj, Martine, ano, je to vytvořeno, jak píšu. Vzhled je pak úkolem šablony, každý CPT a taxonomie má své skripty v šabloně, pokud existují, tak se načtou, jinak je použit např. základní single.php nebo až index.php. Takže pokud mám CPT jménem zaznam, tak skript v šabloně pro zobrazení je single-zaznam.php, archiv těchto článků je archive-zaznam.php. Vlastní taxonomie s názvem obory má pak zobrazení taxonomy-obory.php (tedy výpis všech článků této „rubriky“); v realitě bývá archiv záznamů (2016/09/) a obsah kategorie zobrazován stejně nebo velmi podobně.
    Co a jak se bude ve skriptech zobrazovat, je pak samozřejmě úkolem programátora. Blbé je, že není univerzální způsob, jak to udělat pro každou šablonu… jedině úpravou na míru, nebo shortcodem.

    vl.

    • a registrace CPT jsou primo ve functions.php dane šablony? Nebylo by pak řešením jisté univerzálnosti napsat si jednoduchý plugin, kde budu mit předdefinované sve CPT, tax. a další a jen ho v dalších projektech opakovaně používat? To ale vlastně řeší jen admin část, nikoli frontend.

      • Ano, přesně tak. Já to tak většinou dělám, protože frontend se stejně liší u každé šablony. Většinu zobrazovacích rutin píšu jako funkce z pluginu, v šabloně se jen volají, aby ta logika v šabloně nebyla.

        (Není nic horšího, než premium šablona plná CPT. Nejde odtud snadno migrovat, data jsou vázaná na šablonu. Když je to plugin, může zůstat i po změně šablony.)

  3. Ahoj, můžu se zeptat, zda nemáš někde k nahlédnutí pár webů/kódů/pluginů?
    Začínám s WP a rád bych v něm začal stavět komplet weby ( zatím jsem využíval svůj CMS postaveným na FW, ale starat se kompletně o vše už je nad moje síly ).
    Z tutorialů jsem toho celkem dost pochopil, ale rád bych si prošel nějaký reálný projekty, abych viděl jak se to dělá ( protože praxe je velmi často odlišná od teorie )
    * Jde mi především o frontend – tedy šablony, widgety, navigace.. S custom fields, taxonomy a vůbec celým backendem se zatím jen seznamuji, takže na to je ještě spoustu času 🙂

    Děkuji

  4. Zdravím,
    snažím se vytvořit databázi, nejvíce se to podobá nespíš té databázi pro realitní makléře.
    Pluginy, co jsem našel, byly celkem k ničemu, tak hledám, jak na to.
    Mám na Vás dvě otázky.
    1. Data z formulářů se ukládají do mySQL databáze?
    2. Jaký nástroj vám vypíše výsledky vyhledávání?

    Nejsem žádný profi programátor, tak se snažím najít řešení bez kódování. Největší problémy mi dělá javascript, tak bych se mu nejradši vyhnul úplně.

    • Ahoj, Davrosi,

      ono to bez kódování nepůjde, tohle je minimálně kódování, občas trochu programování.

      1. Pro formuláře používám nejčastěji Caldera Forms, které ukládají data do své sekce Entries (položky), technicky samozřejmě do databáze.
      2. Vyhledávání upravuji pomoci hooků, aby pracovalo také s mými custom fields, protože jinak hledá jen v titulku a těle článku. Ale totéž by mohl zvládnout plugin Relevanssi, který dokáže prohledávat i custom fields.

Napsat komentář

Pin It on Pinterest