Na konci uvádím i tipy na nástroje, frameworky a odkazy, na které jsem narazil v průběhu vývoje a buď mi pomohly, nebo bych je nejspíš použil při podobné budoucí záležitosti.
Nebudu se rozepisovat o detailech, bez reference v podobě Wordpress codexu (dále jen Codex) se určitě neobejdete.
http://codex.wordpress.org/
Custom Post Type
http://codex.wordpress.org/Post_TypesNa míru definovaný typ “dokumentu” Wordpressu s požadovanými položkami. Položky můžou být buď klasické jako známe z klasických článků a příspěvků - tzn textové políčko (v administraci jako input), pole pro větší text (textarea), ale i vyloženě custom záležitosti (color picker apod).
Ke kompletnímu vysvětlení odkazuju na Codex, jde o obecnou definici nového typu, definujeme jeho název, který je jeho identifikátorem v systému, popisky “labels”, chování v systému.
V ukázce kódu je zahrnuta i další záležitost:
Custom capabilities
http://codex.wordpress.org/Function_Reference/register_post_typeVzhledem k tomu, že nám v tomto projektu nevyhovuje využití defaultních práv k postům Wordpressu (tedy je nutno oddělit psaní klasických článků a vytváření těchto dokumentů), musíme si nadefinovat názvy speciálních práv k tomuto Post Typu a napojit je na defaultní práva, aby systém věděl, co znamenají. Custom capabilities mají název podle defaultního práva pro “post”, jen místo tohoto slova vkládáme název právě našeho Post Typu. V příkladu výše “muj_document” resp “muj_documents” - toto je potřeba odlišovat dle původního vzoru.
Custom Roles
http://codex.wordpress.org/Function_Reference/add_capOpět nám nevyhovuje klasické rozřazení Wordpress uživatelů (Administrator, Šéfredaktor, Redaktor atd..), ale chceme uživatelům přiřazovat speciální role, které mají námi definovaná práva.
V prvním řádku jsme přidali do systému novou uživatelskou roli, níže pak přidáváme práva pro manipulaci s našili dokumenty (capabilities), viz výše, pro jistotu můžeme i některé capability odebrat..
Tento kus kódu je vhodné vložit do bloku instalace pluginu, aby se nespouštěl pokaždé. Tzn ho vložíme např. do funkce muj_activate(), kterou pak voláme následujícím způsobem.
Custom Taxonomy
http://codex.wordpress.org/Function_Reference/register_taxonomyJak jsem uvedl výše, jednou ze zásadních věcí je, že jsme schopni si nadefinovat svou strukturu dokumentu, tedy nemusí jít o klasiku v podobě názvu, úvodu, textu, kategorie a štítku, ale lze vše změnit. Kód níže zavádí nové pole Vydavatel, které funguje na principu číselníku (tzn. vlastně upravená verze štítku). Zde opět navazujeme capabilities na námi definované výše.
Custom Meta Boxes
http://codex.wordpress.org/Function_Reference/add_meta_boxPro editaci v administraci je nutné nadefinovat si ovládací prvky. Můžete opět postupovat ručně, dle Codexu. Já našel a použil framework, který ulehčuje velké množství práce.
https://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress
Tipy
Téměř ke konci vývoje jsem narazil na Piklist, který mohl celý vývoj dost zásadně ulehčit, bohužel v dané fázi už to nemělo cenu, ale doporučuju zvážit. Framework se zdá dostatečně flexibilní a umí jednoduše nadefinovat vše, co jsem popsal výše a vyvíjel jsem “ručně”.Pro představu doporučuju prezentaci autorů zde:
http://wordpress.tv/2012/09/04/steve-bruner-and-kevin-miller-building-powerful-websites-and-web-applications-with-piklist/
Web projektu: http://piklist.com/
Obecně velký zdroj všeho kolem těchto rozšíření Wordpressu a customizace je na blogu Justina Tadlocka, takže při studiu určitě chtě nechtě zabrousíte na http://justintadlock.com/.
Pro kontrolu nastavení práv jsem používal Justinův plugin Members. http://wordpress.org/extend/plugins/members/
Dobré, konečně pořádný článek.
OdpovědětVymazatŘešil jsem něco podobného a zatím neznám odpověď na dvě otázky:
1. Nejsem schopen pojmenovat hook, který se volá při uložení mého typu dokumentu. Mělo by to být např. new_mujcustomtype, případně save-mujcustomtype-post.
2. Zatím neumím upravit slug při ukládání dokumentu.
Budu rád za nějaké tipy, díky.
Zdravim, diky.
VymazatK otazkam - tim jsem se nezabyval, ale podle toho, co jsem ted nasel:
ad 1/ ten new_mujcustomtype vypada podle vseho dobre, v pripade "new" jde jen o uplne nove zaznamy bez historie.. obecne ten prefix musi byt z vyctu statusu, jsou zmineny zde:
http://codex.wordpress.org/Post_Status_Transitions
mel by fungovat i save_post s tim, ze vevnitr funkce si zkontrolujete, jestli $post->post_type je ten, o ktery nam jde.
ad 2/ slug se resi v register_post_type parametrem rewrite. pokud to nefunguje, zkusil bych do inicializace pluginu zaradit flush_rewrite_rules();
jeste k te 2/ pokud s tim chcete nejak manipulovat po definici, pak je presne neco takoveho popsane tady: http://wordpress.stackexchange.com/questions/41988/redeclare-change-slug-of-a-plugins-custom-post-type
VymazatDíky, všechno tohle jsem nějak zkoušel, nefungovalo mi to podle očekávání, např. hooky se mi vůbec nespouštěly (na klasickém postu ano) nebo se spouštěly jen adminovi, a to dokonce při quick editu... :-) Chci při uložení článku vytvořit vlastní slug, a to podle hodnot custom fields (ne podle title), a zobrazit uživateli hlášku. Zatím to obcházím... Bohužel ani druhý tip to neřeší, potřeboval jsem definovat vlastní strukturu, např. %JOB%-%PLACE% (kde job je "kuchar" a place třeba "olomouc").
VymazatDíky za radu, ještě to prostuduju a otestuju.
Ech... myslel jsem "konečně pořádný článek o WP", měla to být pochvala :-)
OdpovědětVymazat