{"id":228570,"date":"2022-10-27T09:34:00","date_gmt":"2022-10-27T06:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228570"},"modified":"2022-11-09T03:04:03","modified_gmt":"2022-11-09T00:04:03","slug":"stowarzyszenie-metadanych-wordpress-powiazane-podmioty","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/stowarzyszenie-metadanych-wordpress-powiazane-podmioty\/","title":{"rendered":"Stowarzyszenie metadanych WordPress: powi\u0105zane podmioty"},"content":{"rendered":"\n<p>W tym momencie om\u00f3wili\u015bmy, jak tworzy\u0107 encje we wtyczce (co, jak powiedzieli\u015bmy, jest tylko fantazyjnym s\u0142owem na inny konkretny pomys\u0142). Mianowicie mamy u\u017cytkownika i niestandardowy typ posta, czyli ksi\u0105\u017ck\u0119. I tutaj zaczynamy \u0142\u0105czy\u0107 dwie oddzielne jednostki i pracowa\u0107 z tym, co nazwiemy powi\u0105zaniem metadanych WordPress.<\/p>\n<p>Ale zanim to zrobisz, wa\u017cne jest, aby zrozumie\u0107 dwa typy metadanych, z kt\u00f3rymi b\u0119dziemy pracowa\u0107, oraz dwa sposoby (lub trzy sposoby, w zale\u017cno\u015bci od tego, jak na to spojrzysz), jak mo\u017cemy powi\u0105za\u0107 metadane.<\/p>\n<p>Podobnie jak w przypadku pozosta\u0142ych post\u00f3w z tej serii, nie jest to szczeg\u00f3\u0142owe zag\u0142\u0119bienie si\u0119 w zrozumienie ka\u017cdej z tabel ani szczeg\u00f3\u0142owe zag\u0142\u0119bienie si\u0119 w ka\u017cd\u0105 z funkcji API. Zamiast tego zbadamy, co jest dost\u0119pne, wykorzystamy je i pozostawimy dok\u0142adniejsze szczeg\u00f3\u0142y dla przysz\u0142ych post\u00f3w (lub by\u0107 mo\u017ce dyskusji w komentarzach).<\/p>\n<h2>Stowarzyszenie Metadanych WordPress<\/h2>\n<p>Metadane nie dotycz\u0105 wy\u0142\u0105cznie WordPressa. Prawdopodobnie to wiesz. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Metadata\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">I cz\u0119sto jest definiowany jako<\/a> :<\/p>\n<blockquote>\n<p>Informacje o informacjach lub dane o danych.<\/p>\n<\/blockquote>\n<p>I dobrze to uj\u0105\u0107. WordPress oferuje kilka r\u00f3\u017cnych tabel baz danych, kt\u00f3rych mo\u017cemy u\u017cy\u0107 do dostarczenia informacji o niekt\u00f3rych innych typach podmiot\u00f3w w WordPressie. W dalszej cz\u0119\u015bci tego postu u\u017cyjemy kilku z nich, ale wystarczy powiedzie\u0107, \u017ce <a href=\"https:\/\/codex.wordpress.org\/Database_Description\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress oferuje<\/a> :<\/p>\n<ul>\n<li>metadane komentarza,<\/li>\n<li>metadane posta,<\/li>\n<li>metadane termin\u00f3w,<\/li>\n<li>i metadane u\u017cytkownika<\/li>\n<\/ul>\n<p>A wszystko to dost\u0119pne po wyj\u0119ciu z pude\u0142ka.<\/p>\n<p>Jedna z tabel metadanych WordPressa.<\/p>\n<p>Interfejsy API dla ka\u017cdego z nich s\u0105 sp\u00f3jne, co r\u00f3wnie\u017c jest mi\u0142e. Ale znowu b\u0119dziemy si\u0119 zajmowa\u0107 tylko kilkoma z nich do ko\u0144ca tego postu.<\/p>\n<h3>1 Tabele metadanych<\/h3>\n<p>W naszym przyk\u0142adzie u\u017cyjemy jednej lub obu z poni\u017cszych dw\u00f3ch tabel:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_postmeta\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_postmeta<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_usermeta\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_usermeta<\/a><\/li>\n<\/ol>\n<p>Oczywi\u015bcie w twojej instalacji mog\u0105 mie\u0107 inny prefiks, ale sufiks jest taki sam i masz pomys\u0142.<\/p>\n<p>Po drugie, b\u0119dziemy u\u017cywa\u0107 powi\u0105zanych funkcji API do kojarzenia naszych metadanych. Przyjrzymy si\u0119 im w kodzie podczas kojarzenia danych mi\u0119dzy naszym u\u017cytkownikiem a niestandardowym typem posta (lub naszym autorem i naszymi ksi\u0105\u017ckami, je\u015bli chcesz u\u017cy\u0107 dok\u0142adniejszej terminologii).<\/p>\n<p>W porz\u0105dku. Ca\u0142a pierwsza cz\u0119\u015b\u0107 postu stanowi jedynie podstaw\u0119 do tego, z jakich cz\u0119\u015bci podstawowej infrastruktury WordPressa b\u0119dziemy korzysta\u0107. Maj\u0105c to wszystko na uwadze, sp\u00f3jrzmy, jak mo\u017cemy programowo przekszta\u0142ci\u0107 t\u0119 rzecz w co\u015b bardziej przydatnego.<\/p>\n<h3>2 Kojarzenie metadanych<\/h3>\n<p>Idea skojarzenia metadanych WordPressa wydaje si\u0119 bardziej skomplikowana, ni\u017c jest w rzeczywisto\u015bci. Pomy\u015bl o tym w ten spos\u00f3b:<\/p>\n<ul>\n<li>Bior\u0105c pod uwag\u0119 dwie tabele, w jaki spos\u00f3b mo\u017cemy udost\u0119pnia\u0107 informacje mi\u0119dzy dwoma podmiotami, kt\u00f3re informuj\u0105 jedno o drugim?<\/li>\n<\/ul>\n<p>Na przyk\u0142ad, bior\u0105c pod uwag\u0119 u\u017cytkownika, w jaki spos\u00f3b mo\u017cemy poinformowa\u0107 metadane u\u017cytkownika o metadanych postu. Lub, odwracaj\u0105c to, w jaki spos\u00f3b mo\u017cemy poinformowa\u0107 metadane post\u00f3w o powi\u0105zanych metadanych u\u017cytkownika?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167597-61e7a5d09f770.jpg\" 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-167597-61e7a5d09f770.jpg\" alt=\"Stowarzyszenie metadanych WordPress: powi\u0105zane podmioty\" ><\/a><\/p>\n<p>Na wysokim poziomie w\u0142a\u015bnie to robimy: dajemy jednej istocie zna\u0107, \u017ce istnieje druga i \u0142\u0105czymy j\u0105 z drug\u0105. Albo mo\u017ce p\u00f3j\u015b\u0107 w drug\u0105 stron\u0119. W zale\u017cno\u015bci od implementacji, jedna mo\u017ce by\u0107 bardziej korzystna ni\u017c druga.<\/p>\n<h4>1 W jedn\u0105 stron\u0119<\/h4>\n<p>Kiedy m\u00f3wimy o tworzeniu jednokierunkowych skojarze\u0144 WordPress, zwykle m\u00f3wimy o pomy\u015ble, \u017ce tylko jeden podmiot jest \u015bwiadomy drugiego. Oznacza to, \u017ce u\u017cytkownik mo\u017ce tylko zna\u0107 post.<\/p>\n<p>Mo\u017cemy wi\u0119c skonfigurowa\u0107 po utworzeniu posta, gdy dany u\u017cytkownik jest \u015bwiadomy postu, kt\u00f3ry <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c1245410fdf288edd11c9547711dd76c#file-01-post-aware-of-user-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">w\u0142a\u015bnie zosta\u0142 utworzony<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Using post title as the value, but it's just an example.\nadd_user_meta( $user_id, $post_id, $post_title );<\/code><\/pre>\n<p>A mo\u017ce oznacza to, \u017ce post jest \u015bwiadomy u\u017cytkownika:<\/p>\n<pre><code>&lt;?php\n\n\/\/ User user email address a value but just an example.\nadd_post_meta( $post_id, $user_id, $email_address );<\/code><\/pre>\n<p>Ale bez wzgl\u0119du na to, jak na to spojrzysz, skojarzenie idzie tylko w jedn\u0105 stron\u0119.<\/p>\n<p>I chocia\u017c zwi\u0105zek idzie w jedn\u0105 stron\u0119, nie musi tak by\u0107. Oznacza to, \u017ce obie jednostki mog\u0105 by\u0107 \u015bwiadome siebie nawzajem.<\/p>\n<h4>2 Dwukierunkowy<\/h4>\n<p>Poniewa\u017c interfejsy API metadanych s\u0105 tak \u0142atwe i sp\u00f3jne w obs\u0142udze, praca z nimi nie jest trudna. Ka\u017cdy z nich zwykle wymaga co najmniej dw\u00f3ch z nast\u0119puj\u0105cych element\u00f3w:<\/p>\n<ol>\n<li>identyfikator rodzaju, z kt\u00f3rym powi\u0105zane s\u0105 metadane,<\/li>\n<li>metaklucz, kt\u00f3ry mo\u017cna wykorzysta\u0107 do wyszukania informacji,<\/li>\n<li>warto\u015b\u0107, kt\u00f3ra przechowuje informacje zwi\u0105zane z identyfikatorem i wpisem.<\/li>\n<\/ol>\n<p>To, jaki identyfikator i jaki klucz wybierzesz, cz\u0119sto zale\u017cy od twojej implementacji, jak widzieli\u015bmy.<\/p>\n<p>Do tego momentu przyjrzeli\u015bmy si\u0119, jak stworzy\u0107 jednokierunkowe skojarzenie. Dwukierunkowe skojarzenie niczym si\u0119 nie r\u00f3\u017cni. Zamiast u\u015bwiadamia\u0107 jedn\u0105 istot\u0119 drugiej, u\u015bwiadamiamy obu istotom drug\u0105:<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Using this association will give you the ability to query for information \n * both on posts and users and then work with the data accordingly.\n *\/\nadd_user_meta( $user_id, $post_id, $post_title );\nadd_post_meta( $post_id, $user_id, $email_address );\n<\/code><\/pre>\n<p>Ale to nie jest decyzja, kt\u00f3r\u0105 nale\u017cy podj\u0105\u0107 tylko ze wzgl\u0119du na to. Zamiast tego warto przemy\u015ble\u0107 niekt\u00f3re z powod\u00f3w, dla kt\u00f3rych mo\u017cesz chcie\u0107 wybra\u0107 jeden lub drugi.<\/p>\n<h3>Przemy\u015blanie problemu<\/h3>\n<p>Je\u015bli chodzi o rozwi\u0105zywanie takich problem\u00f3w, nie ma ostatecznego rozwi\u0105zania w kategoriach \u201epowiniene\u015b to zrobi\u0107 [w ten spos\u00f3b]&quot; w jakikolwiek spos\u00f3b. Zamiast tego musisz zada\u0107 sobie pytania typu \u201eco sprawia, \u017ce naj\u0142atwiejszy spos\u00f3b zarz\u0105dzania tymi danymi?&#8221;<\/p>\n<p>Na przyk\u0142ad, je\u015bli interesuje Ci\u0119 przede wszystkim zarz\u0105dzanie u\u017cytkownikami, by\u0107 mo\u017ce wszystko, czego potrzebujesz, to mie\u0107 \u015bwiadomo\u015b\u0107 metadanych u\u017cytkownika o dowolnej encji, z kt\u00f3r\u0105 s\u0105 powi\u0105zane. W ten spos\u00f3b, gdy u\u017cytkownik zostanie usuni\u0119ty, upewnij si\u0119 r\u00f3wnie\u017c, \u017ce wyszukasz powi\u0105zane z nim encje za pomoc\u0105 tabeli metadanych u\u017cytkownika i r\u00f3wnie\u017c je usuniesz.<\/p>\n<p>Podobnie, by\u0107 mo\u017ce ta sama funkcjonalno\u015b\u0107 dzia\u0142a\u0142aby w obie strony. Oznacza to, \u017ce tak jak chcesz si\u0119 upewni\u0107, \u017ce gdy u\u017cytkownik zostanie usuni\u0119ty, jego posty r\u00f3wnie\u017c zostan\u0105 usuni\u0119te, mo\u017cesz r\u00f3wnie\u017c chcie\u0107, aby u\u017cytkownik zosta\u0142 usuni\u0119ty (lub zmodyfikowany) za ka\u017cdym razem, gdy jeden z jego post\u00f3w zostanie usuni\u0119ty. A je\u015bli tak jest, to dwukierunkowe skojarzenie na to pozwala.<\/p>\n<p>Poniewa\u017c masz identyfikator danego posta i identyfikator danego u\u017cytkownika, a tak\u017ce okre\u015blone klucze meta, mo\u017cliwy jest prawie ka\u017cdy rodzaj zapytania, kt\u00f3ry mo\u017cesz zobrazowa\u0107 za pomoc\u0105 interfejsu API metadanych WordPress lub WP_Query <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">,<\/a> a nawet za pomoc\u0105 <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a>.<\/p>\n<h2>Koniec<\/h2>\n<p>Ostatecznie mam nadziej\u0119, \u017ce ta seria dostarczy\u0142a pewnych informacji o tym, jak nie tylko tworzy\u0107 skojarzenia metadanych WordPress, ale tak\u017ce jak abstrakcyjnie my\u015ble\u0107 o koncepcjach w WordPressie w odniesieniu do tworzenia implementacji wy\u017cszego poziomu we wtyczkach i aplikacjach internetowych.<\/p>\n<p>Dla zainteresowanych, rozwa\u017cam wydanie tej serii jako ma\u0142ego zasobu w formacie PDF wraz z dzia\u0142aj\u0105c\u0105 wtyczk\u0105 do nauki. Je\u015bli jest to co\u015b, co Ci\u0119 interesuje, zapisz si\u0119 na list\u0119 dyskusyjn\u0105 tutaj, a na pewno dam Ci zna\u0107, gdy b\u0119dzie gotowa; w przeciwnym razie wykorzystaj informacje z serii, aby i\u015b\u0107 naprz\u00f3d i stworzy\u0107 co\u015b wartego<\/p>\n<h3>Chcie\u0107 wi\u0119cej?<\/h3>\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:\/\/wordpress.mediadoma.com\/pl\/typy-postow-wordpress-abstrakcja-dla-podmiotow\/\" title=\"Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w\">Typy post\u00f3w WordPress: abstrakcja dla podmiot\u00f3w<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association-entities\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">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>W tym miejscu zaczynamy \u0142\u0105czy\u0107 dwie oddzielne jednostki i pracowa\u0107 z tym, co nazwiemy powi\u0105zaniem metadanych WordPress.<\/p>\n","protected":false},"author":1,"featured_media":220451,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,845,866],"tags":[1169],"class_list":["post-228570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228570","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=228570"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/220451"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}