{"id":230821,"date":"2022-12-21T12:31:00","date_gmt":"2022-12-21T09:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230821"},"modified":"2022-12-07T10:26:49","modified_gmt":"2022-12-07T07:26:49","slug":"taksonomie-wordpress-warunki-rodzice-dzieci","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/taksonomie-wordpress-warunki-rodzice-dzieci\/","title":{"rendered":"Taksonomie WordPress: warunki, rodzice, dzieci"},"content":{"rendered":"\n<p>Programowe tworzenie taksonomii wydaje si\u0119 by\u0107 kwesti\u0105, kt\u00f3ra pojawia si\u0119 od czasu do czasu dla tych, kt\u00f3rzy buduj\u0105 rozwi\u0105zania dla innych na WordPress.<\/p>\n<p>Same taksonomie mog\u0105 by\u0107 nawet nieco myl\u0105ce; jednak odkry\u0142em, \u017ce nast\u0119puj\u0105ce elementy zwykle pomagaj\u0105 nieco utrwali\u0107 t\u0119 koncepcj\u0119:<\/p>\n<p>Taksonomie hierarchiczne s\u0105 analogiczne do kategorii; taksonomie niehierarchiczne s\u0105 analogiczne do tag\u00f3w.<\/p>\n<p>Za\u0142\u00f3\u017cmy jednak, \u017ce tworzysz rozwi\u0105zanie dla kogo\u015b, w kt\u00f3rym musisz zaimportowa\u0107 informacje jako post i zastosowa\u0107 do nich taksonomi\u0119. Co wi\u0119cej, by\u0107 mo\u017ce chcesz r\u00f3wnie\u017c zastosowa\u0107 do postu taksonomi\u0119 nadrz\u0119dn\u0105.<\/p>\n<p>Jak mo\u017cemy to zrobi\u0107?<\/p>\n<h2>Taksonomie WordPress: rejestracja, rodzice, dzieci i inne<\/h2>\n<p>Sytuacja wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<p>Masz stanowisko, do kt\u00f3rego zostanie zastosowana taksonomia. Je\u015bli taksonomia ma rodzica, chcemy j\u0105 r\u00f3wnie\u017c zastosowa\u0107 do stanowiska.<\/p>\n<p>Aby to zrobi\u0107, potrzebujemy czterech (mo\u017ce pi\u0119ciu) funkcji:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/register_taxonomy\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">rejestr_taksonomii<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_insert_term\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_insert_term<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/get_term_by\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_term_by<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_set_object_terms\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_set_object_terms<\/a><\/li>\n<\/ol>\n<p>Dodam r\u00f3wnie\u017c, \u017ce my\u015bl\u0119, \u017ce dobrym pomys\u0142em jest u\u017cycie <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/sanitize_title_with_dashes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_title_with_dashs<\/a>, je\u015bli zamierzasz u\u017cywa\u0107 jakiego\u015b rodzaju nieoczyszczonego, przychodz\u0105cego ci\u0105gu dla \u015blimaka typu post (ale nie jest to konieczne, je\u015bli nie jeste\u015b, oczywi\u015bcie ).<\/p>\n<h3>1 Zarejestruj taksonomi\u0119<\/h3>\n<p>W tym przyk\u0142adzie utworzymy taksonomi\u0119 dla niestandardowego typu postu.<\/p>\n<p>Poniewa\u017c mo\u017ce to by\u0107 wszystko, nad czym pracujesz, u\u017cyj\u0119 zmiennej o nazwie <strong>$postType<\/strong>, aby zademonstrowa\u0107 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-00-register-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">punkt<\/a>.<\/p>\n<pre><code>&lt;?php\n\nregister_taxonomy(\n  'acme-category',\n  $postType,\n  [\n      'label' =&gt; 'Acme Categories',\n      'rewrite' =&gt; ['slug' =&gt; 'acme-category'],\n      'capabilities' =&gt; [\n          'manage_terms' =&gt; 'manage_options',\n          'edit_terms' =&gt; 'manage_options',\n          'delete_terms' =&gt; 'manage_options',\n          'assign_terms' =&gt; 'manage_options',\n      ],\n      'hierarchical' =&gt; true,\n  ]\n);<\/code><\/pre>\n<p>To do\u015b\u0107 proste, ale we\u017a notatk\u0119 z <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">odniesienia do kodu<\/a> :<\/p>\n<blockquote>\n<p>Prosta funkcja do tworzenia lub modyfikowania obiektu taksonomii na podstawie podanych parametr\u00f3w. Je\u015bli modyfikujesz istniej\u0105cy obiekt taksonomii, zauwa\u017c, \u017ce <code>$object_type<\/code>warto\u015b\u0107 z oryginalnej rejestracji zostanie nadpisana.<\/p>\n<\/blockquote>\n<p>Og\u00f3lnie rzecz bior\u0105c, nie stanowi to problemu, ale je\u015bli pracujesz nad du\u017c\u0105 aplikacj\u0105 lub ju\u017c istniej\u0105c\u0105 aplikacj\u0105, nale\u017cy o tym pami\u0119ta\u0107.<\/p>\n<h3>2 Wstaw termin do taksonomii<\/h3>\n<p>Nast\u0119pnie za\u0142\u00f3\u017cmy, \u017ce <strong>$customPost<\/strong> jest dost\u0119pny dla Ciebie i ma funkcj\u0119 do pobierania jego nazwy, tytu\u0142u lub innej w\u0142a\u015bciwo\u015bci u\u017cywanej do jego identyfikacji (innej ni\u017c jego identyfikator).<\/p>\n<\/p>\n<p>Mo\u017ce to zosta\u0107 przekazane do funkcji lub mo\u017ce zosta\u0107 udost\u0119pnione poprzez dowolne u\u017cycie innych funkcji zapewnianych przez WordPress. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-01-wp-insert-term-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">W tym przyk\u0142adzie u\u017cyj\u0119 funkcji<\/a> <strong>getName()<\/strong> na obiekcie <strong>$\u00a0<\/strong> customPost .<\/p>\n<pre><code>&lt;?php\n\n$termInfo = wp_insert_term(\n  $customPost-&gt;getName(),\n  'acme-category',\n  ['slug' =&gt; sanitize_title_with_dashes($customPost-&gt;getName())]\n);<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce odczytuj\u0119 r\u00f3wnie\u017c wynik funkcji do\u00a0 zmiennej <strong>$termInfo<\/strong>. U\u017cyjemy tego w nast\u0119pnym kroku, aby wyszuka\u0107 rodzica, je\u015bli istnieje, a tak\u017ce zastosowa\u0107 go do naszego niestandardowego obiektu post.<\/p>\n<h3>3 Wyszukaj rodzica semestru<\/h3>\n<p>Tutaj u\u017cyjemy terminu, kt\u00f3ry w\u0142a\u015bnie stworzyli\u015bmy, aby sprawdzi\u0107, czy istnieje dla niego rodzic. Zauwa\u017c, \u017ce je\u015bli zwr\u00f3ci false, to taksonomia nie istnieje (lub je\u015bli termin nie zosta\u0142 znaleziony).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112a99bca.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-160701-61e7112a99bca.png\" alt=\"Taksonomie WordPress: warunki, rodzice, dzieci\" ><\/a><\/p>\n<p>W tym celu b\u0119dziesz chcia\u0142 doda\u0107 warunek do swojego kodu, aby go utworzy\u0107, je\u015bli to konieczne. Aby jednak kod by\u0142 zwi\u0119z\u0142y, pomijam go w <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-02-get-term-by-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nast\u0119puj\u0105cym kodzie<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$parentTermInfo = get_term_by(\n  'term_taxonomy_id',\n  $termInfo['term_taxonomy_id'],\n  'acme-category',\n  ARRAY_A\n);<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce przechowuj\u0119 wynik powy\u017cszego kodu w\u00a0 zmiennej <strong>$parentTermInfo<\/strong>. To jest po to, aby\u015bmy mogli przekaza\u0107 to do naszej ostatniej funkcji do zastosowania informacji nadrz\u0119dnej do naszego obiektu post.<\/p>\n<h3>4 Zastosuj termin do postu<\/h3>\n<p>Na koniec zastosujemy termin (lub terminy), je\u015bli istnieje obiekt nadrz\u0119dny. Przypomnijmy, \u017ce w tym miejscu b\u0119dzie potrzebny warunek. M\u00f3wi\u0105c najpro\u015bciej, je\u015bli nie ma rodzica, warto\u015b\u0107 <strong>$parentTermInfo[&#8217;parent&#8217;]<\/strong> nie b\u0119dzie potrzebna.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112e513f4.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-160701-61e7112e513f4.png\" alt=\"Taksonomie WordPress: warunki, rodzice, dzieci\" ><\/a><\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-04-wp-set-object-terms-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ale w przypadku poni\u017cszego kodu<\/a> zak\u0142adamy, \u017ce go mamy.<\/p>\n<pre><code>&lt;?php\n\nwp_set_object_terms(\n  $customPost-&gt;getId(),\n  [\n      $parentTermInfo['parent'],\n      $termInfo['term_id'],\n  ],\n  'acme-category',\n  true\n);<\/code><\/pre>\n<p>Na podstawie odwo\u0142ania do kodu zauwa\u017c, \u017ce spowoduje to utworzenie terminu, je\u015bli jeszcze nie istnieje; w przeciwnym razie u\u017cyje tego, co ju\u017c zosta\u0142o zdefiniowane i zastosuje to do posta.<\/p>\n<h2>I zrobione<\/h2>\n<p>Og\u00f3lnie rzecz bior\u0105c, to nie jest a\u017c tak du\u017co pracy. Pomaga to upewni\u0107 si\u0119, \u017ce dobrze rozumiesz, jak dzia\u0142aj\u0105 taksonomie i ich terminy. Co wi\u0119cej, pomaga r\u00f3wnie\u017c wiedzie\u0107, jak pobra\u0107 rodzica danego terminu, je\u015bli chcesz to zrobi\u0107 (w przeciwnym razie trzeci krok nie jest konieczny).<\/p>\n<p>Ale miejmy nadziej\u0119, \u017ce powy\u017csze linki i powy\u017cszy kod zapewni\u0105 wszystko, czego potrzebujesz, aby utworzy\u0107 taksonomi\u0119 i zastosowa\u0107 j\u0105 do posta (a tak\u017ce w razie potrzeby nadrz\u0119dnego terminu).<\/p>\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>Za\u0142\u00f3\u017cmy, \u017ce tworzysz rozwi\u0105zanie, w kt\u00f3rym musisz zastosowa\u0107 do niego taksonomi\u0119. Co wi\u0119cej, chcesz r\u00f3wnie\u017c zastosowa\u0107 taksonomi\u0119 nadrz\u0119dn\u0105 do postu.<\/p>\n","protected":false},"author":1,"featured_media":235914,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,805,836,866],"tags":[1169],"class_list":["post-230821","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-php-7","category-przewodnik-dla-poczatkujacych","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230821","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=230821"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230821\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}