{"id":228562,"date":"2022-10-26T16:51:00","date_gmt":"2022-10-26T13:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228562"},"modified":"2022-11-09T03:04:09","modified_gmt":"2022-11-09T00:04:09","slug":"typy-postow-wordpress-abstrakcja-dla-podmiotow","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/typy-postow-wordpress-abstrakcja-dla-podmiotow\/","title":{"rendered":"Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w"},"content":{"rendered":"\n<p>Kiedy programi\u015bci m\u00f3wi\u0105 o podmiotach, zwykle m\u00f3wi\u0105 o koncepcji lub czym\u015b, co istnieje w systemie. Czasami jest to klasa, czasami biblioteka lub zale\u017cno\u015b\u0107, a mo\u017ce to by\u0107 co\u015b w rodzaju typ\u00f3w post\u00f3w WordPress.<\/p>\n<p>Je\u015bli WordPress ma by\u0107 traktowany jako <a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">podstawa aplikacji (w przeciwie\u0144stwie do frameworka)<\/a>, wa\u017cne jest, aby my\u015ble\u0107 o pewnych funkcjach w spos\u00f3b, kt\u00f3ry mo\u017cna traktowa\u0107 jako byty. W powy\u017cszym przyk\u0142adzie typ posta jest w\u0142a\u015bnie taki.<\/p>\n<p>Kiedy wprowadzono niestandardowe typy post\u00f3w, <a href=\"https:\/\/make.wordpress.org\/training\/handbook\/theme-school\/custom-post-types\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">da\u0142o nam to mo\u017cliwo\u015b\u0107<\/a> wprowadzenia do aplikacji czego\u015b innego ni\u017c strony i posty. Teraz mo\u017cemy zaimplementowa\u0107 dowoln\u0105 koncepcj\u0119 \u2013 np. <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/odpytywanie-typow-postow-o-wydarzeniach-za-pomoca-zapytania-wp-i-kalendarza-wydarzen\/\" title=\"wydarzenie\">wydarzenie<\/a> \u2013 i potraktowa\u0107 j\u0105 jako osobn\u0105 ca\u0142o\u015b\u0107 w systemie.<\/p>\n<p>Ale kiedy wszystko jest powiedziane i zrobione, wszystko jest zapisywane w tabeli post\u00f3w. I to jest w porz\u0105dku, poniewa\u017c tworzenie oprogramowania polega na abstrakcji. Wdra\u017caj\u0105c typy post\u00f3w WordPress, wdra\u017camy abstrakcj\u0119 na szczycie idei post\u00f3w.<\/p>\n<h2>Typy post\u00f3w WordPress<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/programowe-tworzenie-uzytkownikow-wordpress\/\" title=\"W ostatnim po\u015bcie\">W ostatnim po\u015bcie<\/a> przeszed\u0142em przez proces tworzenia u\u017cytkownika, kt\u00f3ry ostatecznie b\u0119dzie powi\u0105zany z jakim\u015b podmiotem w aplikacji WordPress.<\/p>\n<ul>\n<li>By\u0107 mo\u017ce jest autorem postu,<\/li>\n<li>By\u0107 mo\u017ce jest sprzedawc\u0105 produktu,<\/li>\n<li>By\u0107 mo\u017ce jest narratorem opowie\u015bci,<\/li>\n<li>Albo cokolwiek innego mo\u017cesz sobie wyobrazi\u0107.<\/li>\n<\/ul>\n<p>Mo\u017cliwo\u015bci s\u0105 niesko\u0144czone. Zanim jednak porozmawiamy o tym, jak utworzy\u0107 powi\u0105zanie mi\u0119dzy dwiema encjami \u2013 to znaczy u\u017cytkownikiem i typem posta WordPress \u2013 musimy porozmawia\u0107 o tym, jak programowo zaimplementowa\u0107 encj\u0119 lub niestandardowy typ posta.<\/p>\n<p>Istnieje wiele dokumentacji na ten temat i dost\u0119pnych jest wiele samouczk\u00f3w na ten temat, wi\u0119c nie b\u0119d\u0119 omawia\u0142 tego tematu. Zamiast tego postaram si\u0119, aby by\u0142o to jak najprostsze. Pami\u0119taj, \u017ce celem ca\u0142ej serii jest ostateczne dotarcie do punktu, w kt\u00f3rym kojarzymy byty za pomoc\u0105 metadanych.<\/p>\n<p>Ale zanim to zrobimy, musimy stworzy\u0107 byty. Tak wi\u0119c mamy u\u017cytkownika, wi\u0119c zr\u00f3bmy to.<\/p>\n<p>W naszym przyk\u0142adzie za\u0142\u00f3\u017cmy, \u017ce u\u017cytkownik, kt\u00f3rego utworzyli\u015bmy w poprzednim po\u015bcie, Meghan, jest autorem ksi\u0105\u017cki. A w instalacji WordPress zarz\u0105dzanej przez kogo\u015b innego istnieje niestandardowy typ postu dla ksi\u0105\u017cek, z kt\u00f3rych ka\u017cdy ma kilka atrybut\u00f3w:<\/p>\n<ul>\n<li>tytu\u0142,<\/li>\n<li>opis,<\/li>\n<li>Data publikacji,<\/li>\n<li>numer ISBN,<\/li>\n<li>liczba sprzedanych egzemplarzy pocz\u0105tkowych,<\/li>\n<li>gdzie mo\u017cna go kupi\u0107,<\/li>\n<li>i tak dalej.<\/li>\n<\/ul>\n<p>Mo\u017cesz doda\u0107 wi\u0119cej lub mniej do swojej implementacji. By\u0107 mo\u017ce zajmujesz si\u0119 sprzeda\u017c\u0105 e-book\u00f3w, a adres URL ksi\u0105\u017cki do zakupu jest jednym z atrybut\u00f3w. W ka\u017cdym razie masz pomys\u0142.<\/p>\n<p>Maj\u0105c to na uwadze, mo\u017cemy programowo zaimplementowa\u0107 prosty niestandardowy typ postu dla \u201eksi\u0105\u017cek&quot;.<\/p>\n<h3>Wdra\u017canie typu postu<\/h3>\n<p>A to wygl\u0105da <a href=\"https:\/\/gist.github.com\/tommcfarlin\/17ab6e5d052da8d471b15cfd70ffa37c\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action( 'init', 'acme_create_book_post_type' );\n\/**\n * Creates a new custom post type called 'Book' using the smallest number of arguments\n * to prepare the post type.\n *\/\nfunction acme_create_book_post_type() {\n\n    $args = array(\n        'labels' =&gt; array(\n            'name'          =&gt; 'Books',\n            'singular_name' =&gt; 'Book',\n        ),\n        'public' =&gt; true,\n    );\n    register_post_type( 'acme_book', $args );\n}<\/code><\/pre>\n<p>Je\u015bli przeczytasz dokumentacj\u0119 dotycz\u0105c\u0105 <a href=\"https:\/\/codex.wordpress.org\/Post_Types\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tworzenia niestandardowych typ\u00f3w post\u00f3w<\/a>, nie ma w tym nic nienormalnego. Powinno wygl\u0105da\u0107 dok\u0142adnie tak, jak by\u015b si\u0119 spodziewa\u0142.<\/p>\n<p>To, gdzie tworzysz, zale\u017cy od charakteru Twojego projektu. Jest wiele os\u00f3b, kt\u00f3re b\u0119d\u0105 argumentowa\u0107, \u017ce jest we wtyczce lub jest zapiekany w motywie. To nie jest miejsce na debat\u0119. Wystarczy powiedzie\u0107, \u017ce dla moich cel\u00f3w zak\u0142adam, \u017ce jest to cz\u0119\u015b\u0107 tej samej wtyczki z poprzedniego samouczka.<\/p>\n<p>Co wi\u0119cej, nie mam na my\u015bli niestandardowych taksonomii, komentarzy ani \u017cadnego innego niestandardowego typu danych, kt\u00f3ry mo\u017cna powi\u0105za\u0107 z niestandardowym typem posta.<\/p>\n<p>Nast\u0119pnie przyjrzymy si\u0119, jak to wygl\u0105da w obszarze administracyjnym WordPressa, a tak\u017ce jak to wygl\u0105da w bazie danych.<\/p>\n<h3>Sp\u00f3jrz za zas\u0142on\u0119<\/h3>\n<p>Po pierwsze, oto jak to wygl\u0105da (lub powinno wygl\u0105da\u0107) w obszarze administracyjnym WordPressa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a62adc9ed.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a62adc9ed.png\" alt=\"Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w\" ><\/a><\/p>\n<p>A je\u015bli spojrzysz na baz\u0119 danych po utworzeniu wpisu, zobaczysz co\u015b takiego:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a6307603a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a6307603a.png\" alt=\"Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w\" ><\/a><\/p>\n<p>Oczywi\u015bcie ograniczy\u0142em rekordy zwracane w interfejsie bazy danych, filtruj\u0105c wyniki, aby u\u0142atwi\u0107 \u015bledzenie zrzutu ekranu.<\/p>\n<h2>O ksi\u0105\u017ckach<\/h2>\n<p>I to jest to, naprawd\u0119. To znaczy, na najbardziej podstawowym poziomie, w ten spos\u00f3b tworzysz niestandardowy typ postu w WordPressie. Wiem, \u017ce to nic nowego, ale gdybym m\u00f3g\u0142 nieco mocniej uzasadni\u0107 taki post, zawiera\u0142by nast\u0119puj\u0105ce dwa punkty.<\/p>\n<h4>1 Chodzi o abstrakcje<\/h4>\n<p>Je\u015bli chcesz zaj\u0105\u0107 si\u0119 tworzeniem aplikacji internetowych za pomoc\u0105 WordPress, wa\u017cne jest, aby przesta\u0107 my\u015ble\u0107 o rzeczach w kategoriach tradycyjnych, takich jak posty, strony, komentarze i kategorie, i zacz\u0105\u0107 my\u015ble\u0107 o nich jako o bardziej og\u00f3lnych abstrakcjach.<\/p>\n<p>Podmioty, jak wspomniano wcze\u015bniej w artykule. Kiedy to zrobisz, nast\u0105pi zmiana w modelu mentalnym, kt\u00f3ry nap\u0119dza twoj\u0105 zdolno\u015b\u0107 do przemy\u015blenia i wdro\u017cenia rozwi\u0105zania.<\/p>\n<h4>2 Chodzi o relacje<\/h4>\n<p>Chocia\u017c cz\u0119sto my\u015blimy o rzeczach w ich poszczeg\u00f3lnych cz\u0119\u015bciach, takich jak posty i strony, nieod\u0142\u0105cznie wiemy, \u017ce posty mog\u0105 zawiera\u0107 komentarze, komentarze mog\u0105 zawiera\u0107 odpowiedzi, strony mog\u0105 mie\u0107 szablony i tak dalej.<\/p>\n<p>Pomi\u0119dzy wszystkimi tymi indywidualnymi rzeczami, kt\u00f3re s\u0105 cz\u0119\u015bci\u0105 systemu, istniej\u0105 relacje. A kiedy zaczynasz my\u015ble\u0107 o zwi\u0105zkach jako o czym\u015b, co pozwala nam robi\u0107 wi\u0119cej, zaczynasz dostrzega\u0107, jak pot\u0119\u017cne mo\u017ce by\u0107 co\u015b. Ca\u0142o\u015b\u0107 \u201eca\u0142o\u015b\u0107 jest wi\u0119ksza ni\u017c suma jej cz\u0119\u015bci&#8221;.<\/p>\n<p>Kiedy wi\u0119c masz ju\u017c na swoim miejscu poszczeg\u00f3lne byty i kiedy zaczynasz widzie\u0107, jak mog\u0105 si\u0119 one ze sob\u0105 odnosi\u0107, robisz krok w tworzeniu czego\u015b, co rozwi\u0105zuje nieco bardziej z\u0142o\u017cony problem z pozornie prostych cz\u0119\u015bci.<\/p>\n<p>I w\u0142a\u015bnie tam pojedziemy dalej.<\/p>\n<h2>A co z metadanymi?<\/h2>\n<p>Ca\u0142ym celem tej serii jest przej\u015bcie przez to, jak stworzy\u0107 zwi\u0105zek mi\u0119dzy podmiotami, prawda? W szczeg\u00f3lno\u015bci chcemy stworzy\u0107 powi\u0105zanie mi\u0119dzy u\u017cytkownikiem a postem, a dok\u0142adniej autorem i ksi\u0105\u017ck\u0105.<\/p>\n<p>Podstaw\u0105 do tego jest WordPress, i to w\u0142a\u015bnie w tym momencie w gr\u0119 mo\u017ce wchodzi\u0107 moc dodatkowych tabel i hak\u00f3w. W nast\u0119pnym po\u015bcie opowiem o tym, jak utworzy\u0107 to powi\u0105zanie, o kierunkach, w kt\u00f3rych mog\u0105 i\u015b\u0107 powi\u0105zania i jak pracowa\u0107 z tymi danymi, je\u015bli, powiedzmy, u\u017cytkownik zostanie usuni\u0119ty z aplikacji.<\/p>\n<h2>Posty z serii<\/h2>\n<ol>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Stowarzyszenie metadanych WordPress: jak to zrobi\u0107<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/programowe-tworzenie-uzytkownikow-wordpress\/\" title=\"Programowe tworzenie u\u017cytkownik\u00f3w WordPress\">Programowe tworzenie u\u017cytkownik\u00f3w WordPress<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-post-types\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/stowarzyszenie-metadanych-wordpress-powiazane-podmioty\/\" title=\"Stowarzyszenie metadanych WordPress: powi\u0105zane podmioty\">Stowarzyszenie metadanych WordPress: powi\u0105zane podmioty<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kiedy programi\u015bci m\u00f3wi\u0105 o encjach, zwykle maj\u0105 na my\u015bli poszczeg\u00f3lne cz\u0119\u015bci w systemie \u2013 na przyk\u0142ad typy post\u00f3w WordPress.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,845,866],"tags":[1169],"class_list":["post-228562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228562"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228562\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}