Snippety

Jak u WordPress na vlastní typ příspěvků (Custom Post Types)

Vývojář
Autor příspěvku Tomáš Cirkl

WordPress je úžasný redakční systém pro tvorbu obsahu a využívání vlastních typů příspěvků (anglicky Custom Post Types) přináší další skvělé možnosti. V tomto článku si ukážeme jak vytvořit vlastní typ příspěvků a jak s ním dále pracovat.

Vlastní typ příspěvků začal být skvěle využitelný ve verzi WordPress 2.8, kdy byla přidána funkce register_post_type(), která tuto možnost nabídla všem.

Co vlastní typy příspěvků ve WordPress umí

Vlastní typy příspěvků nejsou nic jiného než klasické příspěvky s jinou hodnotou u post_type v databázi. Typ příspěvků pro klasické příspěvky je post, stránky používají page, přílohy používají attachment a tak dále.

Nyní si můžete vytvořit vlastní typ příspěvků pro obsah jaký na webu chcete mít. Pro knihy, recence, zájezdy, produkty…

Správným postupem tvorby získáte následující vlastnosti:

  • Vlastní typ příspěvků se zobrazí ve WordPress administraci jako nová položka menu. S vlastním přehledem a stránkou “vytvořit”.
  • URL adresa http://mojestranka.cz/vlastnitypprispevku/ bude sloužit jako archiv.
  • Kategorie a štítky mohou být dostupné i pro vlastní typ příspěvků, případně si můžete vytvořit vlastní taxonomii.

Mimo výše zmíněné možnosti, můžete určit také kde se vlastní typ příspěvků zobrazí v menu, zda v něm bude fungovat hledání, kteří uživatelé si jej mohou zobrazit atd.

Různé typy obsahu mají různé požadavky na data. Například u klasických příspěvků chcete specifikovat autora, rubriku, datum atd. U vlastního typu příspěvků “Knihy” chcete specifikovat autora knihy, žánr, vydavatele a další. K tomu skvěle slouží vlastní meta boxy, které jednoduše vytvoříte a spravujete.

Vlastní meta boxy přidají další boxy do stránky sloužící pro úpravu/tvorbu příspěvku. Nejčastěji využívají uživatelské pole (custom fields) a ty také lze k tomu také využít, ale oddělením některých uživatelských polí jako meta boxů můžete vytvořit mnohem uživatelsky přívětivější prostředí.

Práce s vlastními typy příspěvků

Pro efektivní tvorbu vlastních typů příspěvků musíte být seznámeni s následujícím:

  • Tvorba vlastních typů příspěvků,
  • Tvorba vlastních taxonomií,
  • Tvorba vlastních meta boxů.

Tvorba vlastních typů příspěvků

První věcí je vytvoření samotného vlastního typu příspěvků. Ideálně byste k tomu měli vytvořit vlastní plugin nebo použít functions.php child theme.

V té nejjednodušší formě se vytvoří vlastní typ příspěvků, který nemá vlastně žádné nastavení. Nebude veřejný, nebude se zobrazovat v administraci, zprávy budou stejné jako u příspěvků. Pro úpravu tohoto nastavení budeme muset použít jedny z nejčastějších nastavení a přiřadíme je, k prozatím prázdnému, $args.

  • labels – možnost, která definuje různé informace k vlastnímu typu příspěvků. Výše jsem je rozepsal, aby to bylo jasnější a srozumitelnější.
  • description – krátký popis vlastního typu příspěvků.
  • public – nastavení, které když je nastavené na true ovlivňuje celou řadu dalších nastavení (spojeních s viditelností).
  • menu_icon – ikonka u názvu v menu, vybrat si ji můžete v sekci Dashicon.
  • menu_position – definuje pozici vlastních příspěvků v menu. Číslo 5 jej umístí za Příspěvky. Čím vyšší číslo zvolíte, tím nižší bude pozice v menu.
  • supports – tato možnost určí výchozí WordPress nastavení dostupné při úpravě vlastního typu příspěvků. Ve výchozím nastavení je zobrazený pouze titulek a editor obsahu. Pokud chcete přidat podporu pro komentáře, revize nebo typy příspěvků (post formats), musíte je specifikovat. Celý list argumentů najdete v jejich sekci v kodexu.
  • has_archive – pokud nastaveno na true vytvoří se archiv na URL adrese http://mojestranka.cz/vlastnitypprispevku/
Vlastní typ příspěvku v menu

Vlastní typ příspěvku v menu

Jakmile máte toto nastavené, měli byste v menu vidět vlastní typ příspěvku. Dále byste měli být schopni vytvořit a zobrazit seznam příspěvků v administraci a zobrazit příspěvky na stránce.

Poznámka: Pokud nepůjde příspěvky zobrazit na stránce, tak přeuložte trvalé odkazy.

Vlastní zprávy

WordPress vytváří velké množství zpráv spuštěných různou akcí uživatele. Aktualizace, publikování, hledání atd. V administraci jsou tyto stránky ve výchozím nastavení napojeny na ty od klasických příspěvků. Text pro tyto zprávy můžete jednoduše změnit použitím hooku post_updated_messages.

Vlastní typ příspěvků - upravené zprávy

Vlastní typ příspěvků – upravené zprávy

Jak můžete vidět není to zrovna nejpřívětivější metoda jak spravovat zprávy. Ale nedá se s tím moc co dělat. Pokud chceme udělat administrační prostředí pro klienta nebo sebe dotažené do konce bez matoucích zpráv, je lepší to upravit.

Kontextová nápověda

Zajímavou funkcí, která ale není moc používána je kontextová nápověda.

Kontextová nápověda je možnost, která se zobrazí v pravém horním rohu vedle Nastavení zobrazených informací.

Kontextová nápověda

Kontextová nápověda

Toto je opět trochu složitější použít, protože potřebujete vědět ID stránky, na které se nacházíte. Pokud použijete proměnou $screen, měli by jste být schopni ID získat jednoduše.

Shrnutí

Použili jsme tři funkce a vytvořili “kompletní” vlastní typ příspěvků.

  • register_post_type() pro vytvoření vlastního typu příspěvků
  • contextual_help pro tvorbu kontextové nápovědy
  • post_updated_messages pro úpravu zpráv

Vlastní taxonomie

Klasický blog používá kategorie a štíky k vytvoření organizované struktury. Nicméně stejná struktura nemusí dávat smysl při použití u vlastních typů příspěvků. Váš blog může být ohledně politiky, nápadů a inspirací, ale třeba v našem případě zájezdy těžko.

Z toho důvodu je možné vytvořit vlastní taxonomie.

Podobně jako tomu je u vlastního typu příspěvků můžete vytvořit vlastní taxonomii poměrně jednoduše.

Jak můžete vidět, moc se toho nezměnilo. Přidali jsme nějaké popisky (labels) a povolili hierarchii. To aktivovalo styl taxonomie jako je u rubrik. Když to nastavíte na false (výchozí nastavení), bude taxonomie vypadat více jako štítky.

Existuje ještě další nastavení, ale je krásně popsané v kodexu u reference/register taxonomy.

Vlastní taxonomie

Vlastní taxonomie

Vlastní meta boxy

Meta boxy jsou boxy zobrazené ve WordPress adminsitraci při úpravě/tvorbě příspěvku. Je zde velké množství zabudovaných meta boxů jako box pro publikaci příspěvku, taxonomie, autora…

Tyto boxy si můžete vytvářet i sami.

Meta boxy jsou zamýšlené pro správu dat uložených v uživatelských polích. Jsou více uživatelsky přívětivější než výchozí uživatelské pole.

Tvorba meta boxů obsahuje tři kroky:

  • Definování samotného boxu.
  • Definování obsahu boxu.
  • Definování jak naložit s daty.

Definování meta boxu

Kód výše vytvoří metabox s následujícími parametry:

  • Unikátním identifikátorem meta boxu
  • Nadpisem meta boxu
  • Funkcí, která zobrazí obsah boxu
  • Typu příspěvku, ke kterému box patří
  • Umístěním meta boxu
  • Prioritou meta boxu

Definování obsahu meta boxu

Tento jednoduchý box obsahuje pouze pole pro cenu. Součástí je i skryté pole wp_nonce_field, které slouží pro kontrolu autorizace. Je to z bezpečnostní prvek, protože tak můžeme určit, zda byla post hodnota skutečně odeslána z aktuální stránky.

Definování jak naložit s daty

Ve většině případů budete chtít uložit data jako uživatelská pole, ale nejste tím omezeni. Stejně tak můžete data poslat pomocí API nebo vygenerovat XML soubor. Nejčastější je však uložení dat jako uživatelská pole a ukážeme si jak se to dělá.

Největší část této funkce je ohledně bezpečnosti. Nejdříve, pokud se provede autosave, tak se nic nestane, protože uživatel neodeslal formulář. Poté je otestován nonce a následuje kontrola práv. Jestliže toto vše projde, tak se data pomocí funkce update_post_meta() uloží.

Vlastní meta box

Vlastní meta box

Zobrazení vašeho obsahu

Poslední věcí, kterou zbývá je ukázat jak data zobrazit. Opět se podáváme jen na základy, protože možnosti jak pracovat s vlastními typy obsahu jsou obrovské.

Zobrazení příspěvků

Pokud jste vytvořili vlastní typ příspěvků s parametrem has_archive nastaveným na true, tak WordPress zobrazí seznam vašich příspěvků na stránce s archivy. Pro zobrazení stačí jít na http://mojestranka.cz/vlastnitypprispevku/.

Tato stránka používá soubor archive-[post_type].php pro zobrazení (u nás to je archive-zajezdy.php). Když soubor neexistuje je automaticky použit soubor archive.php. Když ani ten neexistuje využije se index.php.

Dalším způsobem jak vypsat vlastní typ příspěvků je využití vlastního dotazu s využitím WP_Query. Pro zobrazení příspěvků z určité vlastní taxonomie můžete využít následující vzor:

Zobrazení meta dat

Metadata mohou být získány jednoduše pomocí fuknce get_post_meta(). V našem případě výše jsme uložili meta pole jménem cena_zajezdu. Hodnotu můžeme získat pomocí následující kódu:

Shrnutí na závěr

Jak můžete vidět tvorba různých typů obsahu pro WordPress je poměrně jednoduchá. Metody použité zde můžete využít jako základ a v administraci z nich vytvořit prakticky cokoliv.

Zdroj: The Complete Guide To Custom Post Types

O autorovi

Tomáš Cirkl

Baví mě Internet a zvláště pak redakční systém WordPress. Jsem pravidelným účastníkem a přednášejícím na WordCamp Praha a WordPress konferencích.

15 komentářů

  • Zdravím, jakým způsobem u vlastního typu příspěvku aktivovat rubriky a tagy? Nejlépe tak, aby každý typ příspěvků měl vlastní tagy a kategorie.

  • Zdravím, první jsem si to zkusil aplikovat na svoje proměnné, ale nešlo to, tak jsem to všechno zkopíroval jak to je na této stránce a admin je v pohodě, ale layout stále vypisuje, že zájezdy neexistují. Mám vytvořené dva zkušební zájezdy.
    Všechny funkce krom toho výpisu mám ve functions.php… výpis mám v index.php.
    Kde může být ještě problém?
    Díky za reakci

  • a ak by som si chcel pridat novy stlpec ako je napr. nazov, datum.. ako by som vedel pridat stlpec “Cena” tak aby mi tam zobrazovalo cenu s metaboxu?? 🙂

    da sa to?

  • Zdravím,

    super článek. Právě uvažuju o jednom projektu, mohl bych požádat o radu?
    Co když těch vlastních typů příspěvků můžu mít více, ovšem mezi sebou provázaných. Příklad:
    Revizní technik: vyplním jméno, telefon, email

    Pak další typ příspěvku
    Provedená revize: vygenerované unikátní číslo a vybrat si z rozbalovacího menu jméno revizáka z Revizní technik.

    Nenapadlo mně teď jiné vzorové pojmenování, snad chápete, co mám na mysli. Lze toho dosáhnout pomocí vlastních příspěvků? Můžete mně nasměrovat na nějakou stránku, kde bych se o tom dozvěděl více?

    Děkuji.

    • Dobrý den,
      na pořádnou odpověď ste toho moc neřekl ale propojit je určitě jde.

      Můžete například vytvořit typ příspěvku Revizní technik a u něj do metaboxu to jméno a tak.
      Potom vytvoříte revize a do metaboxu si vypíšete select kde bude ID a jméno technika to si pak uložíte k revizi.

      Další řešení by bylo třeba mít Revizní techniky jako kategorii příspěvu Revize.

      Možností se mnoho aby sme našli ideální řešení chtělo by to kompletní zadání. Pokud to třeba budete chtít jen vypsat na webu tak není třeba ani dva typy příspěvku. Vyberte si třeba revizi a technika jen vyplňujte v metaboxu protože výpis pak bude rychlejší než když se bude načítat několik příspěvků.

      V tomto případě by možná bylo nejrozumnější použít uživatele jako Revizní techniky protože pak byste měl rovnou postaráno o výpis všech revizí provedených daným technikem.

      Snad sem Vám v tom neudělal moc velký zmatek:-)

      • Komplexní zadání by bylo asi složité na pochopení, ale zkusím to 🙂
        Jde o to, že brácha dělá revize hasicích přístrojů. A páč je bordelář a staropracant, tak prostě má vytištěné formuláře, které ručně vypisuje. Když jde dělat novou revizi, prohledává papíry a hleá poslední číslo revize. Tak jsem mu chtěl udělat radost k narozeninám, že bych mu to zautomatizoval online, tak mi zkuste helpnout 🙂

        Revizní list obsahuje:
        Jméno revizáka + jeho ID číslo
        Místo, kde byla revize provedena (objednavatel)
        Typ hasičáku
        Datum kdy byla provedena revize
        Datum kdy má být opět provedena revize
        Textové pole, kde vypisuje co prováděl (výměna hadice, držáku a podobné ptákoviny)

        Kvůli konfortu bych mu vytvořil databázi revizáků (sice jsou tři, ale mění se)-čili možnost přidat jméno+ID
        Vytvořit adresář objednavatelů (více méně se nemění, zato přibývají)-takže opět možnost přdávat další
        Objednavatel má předem stanované typy HP a počty kusů-čili v souvislosti s objednavatelem přiřadit mu jeho seznam HP (abych nezapomněl, zobrazovat by se měl Typ HP, výrobní číslo)
        Datum provedení revize (klidně napsat ručně)-automaticky vygenerovat datum příští revize (+1 rok) klidně až po uložení
        Vypsat nějakou tu zprávu co se dělalo

        Čili asi žádná sranda. Jako teoreticky bych asi zvládl vytvořit typy příspěvků:
        revizní technik+id
        adresář

        ale díky absenci angličtiny tápu v tom, jak k vytvořenému kontaktu přidam jaké HP má (mohou se měnit)
        dále jak při vytváření samotné zprávy udělat, aby si např pomocí rozbalovacího menu vybral, revizáka, objednavatele (a s tím se ideálně zobrazil seznam HP ale nemusí být, chápu, že je to zálěžitost javascriptu a to už ej úúúplně španělskovietnamská vesnice)
        jak automaticky vygenerovat datum příští revize
        a navíc by bylo ideální, aby třeba měsíc před další revizí to poslalo email, že u toho a toho objednavatele se musí udělat revize (těch objednavatelů může být více v jednom termínu)

        Nu, asi nic snadného 🙂

Zanechat komentář

Přijďte 22.6. na naše WordPress Školení

Sdílet na Pinterestu

Získejte více informací o WordPress!

Připojte se do našeho emailového seznamu a nenechte si ujít informace, novinky a návody ze světa WordPressu.

Úspěšně jste se zapsali do našeho newsletteru. Děkujeme!