{"id":231458,"date":"2022-12-21T13:00:00","date_gmt":"2022-12-21T10:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231458"},"modified":"2022-12-07T10:26:42","modified_gmt":"2022-12-07T07:26:42","slug":"wordpress-taksonomiat-ehdot-vanhemmat-lapset","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-taksonomiat-ehdot-vanhemmat-lapset\/","title":{"rendered":"WordPress-taksonomiat: ehdot, vanhemmat, lapset"},"content":{"rendered":"\n<p>Ohjelmallinen taksonomioiden luominen n\u00e4ytt\u00e4\u00e4 olevan asia, joka tulee aina uudelleen esiin niille, jotka rakentavat ratkaisuja muille WordPressiss\u00e4.<\/p>\n<p>Taksonomiat itse voivat olla jopa hieman h\u00e4mment\u00e4vi\u00e4; Olen kuitenkin huomannut, ett\u00e4 seuraavat asiat yleens\u00e4 auttavat vahvistamaan konseptia hieman:<\/p>\n<p>Hierarkkiset taksonomiat ovat analogisia kategorioiden kanssa; ei-hierarkkiset taksonomiat ovat analogisia tunnisteiden kanssa.<\/p>\n<p>Oletetaan kuitenkin, ett\u00e4 luot jollekin sellaisen ratkaisun, ett\u00e4 sinun on tuotava tiedot postauksena ja k\u00e4ytett\u00e4v\u00e4 siihen taksonomiaa. Lis\u00e4ksi ehk\u00e4 haluat soveltaa viestiin my\u00f6s p\u00e4\u00e4taksonomiaa.<\/p>\n<p>Kuinka voimme tehd\u00e4 sen?<\/p>\n<h2>WordPress-taksonomiat: rekister\u00f6inti, vanhemmat, lapset ja paljon muuta<\/h2>\n<p>Tilanne on jotakuinkin t\u00e4llainen:<\/p>\n<p>Sinulla on viesti, johon sovelletaan taksonomiaa. Jos taksonomialla on vanhempi, haluamme soveltaa sit\u00e4 my\u00f6s virkaan.<\/p>\n<p>T\u00e4t\u00e4 varten tarvitsemme nelj\u00e4 (ehk\u00e4 viisi) toimintoa:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/register_taxonomy\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">rekisteri_taksonomia<\/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>Lis\u00e4\u00e4n my\u00f6s, ett\u00e4 mielest\u00e4ni on hyv\u00e4 idea k\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/sanitize_title_with_dashes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_title_with_dashes<\/a>, jos aiot k\u00e4ytt\u00e4\u00e4 jonkin tyyppist\u00e4 puhdistamatonta saapuvaa merkkijonoa viestin tyypin slugille (mutta se ei tietenk\u00e4\u00e4n ole v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4, jos et ole ).<\/p>\n<h3>1 Rekister\u00f6i taksonomia<\/h3>\n<p>T\u00e4t\u00e4 esimerkki\u00e4 varten aiomme luoda taksonomian mukautetulle viestityypille.<\/p>\n<p>Koska t\u00e4m\u00e4 voi olla mik\u00e4 tahansa, jonka parissa ty\u00f6skentelet, aion k\u00e4ytt\u00e4\u00e4 muuttujaa nimelt\u00e4 <strong>$postType<\/strong> osoitan <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-00-register-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">asian<\/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>Se on riitt\u00e4v\u00e4n yksinkertaista, mutta ota huomioon <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodiviittaus<\/a> :<\/p>\n<blockquote>\n<p>Yksinkertainen toiminto taksonomiaobjektin luomiseen tai muokkaamiseen annettujen parametrien perusteella. Jos muutat olemassa olevaa taksonomiaobjektia, huomaa, ett\u00e4 <code>$object_type<\/code>alkuper\u00e4isen rekister\u00f6innin arvo korvataan.<\/p>\n<\/blockquote>\n<p>Yleens\u00e4 t\u00e4m\u00e4 ei ole ongelma, mutta jos ty\u00f6skentelet suuren sovelluksen tai jo olemassa olevan sovelluksen parissa, se on pidett\u00e4v\u00e4 mieless\u00e4.<\/p>\n<h3>2 Lis\u00e4\u00e4 termi taksonomialle<\/h3>\n<p>Oletetaan seuraavaksi, ett\u00e4 <strong>$customPost<\/strong> on k\u00e4ytett\u00e4viss\u00e4si ja ett\u00e4 siin\u00e4 on toiminto sen nimen, otsikon tai jonkin muun ominaisuuden, jota se tunnistaa (muu kuin sen tunnus), hakemiseen.<\/p>\n<\/p>\n<p>T\u00e4m\u00e4 voidaan siirt\u00e4\u00e4 toimintoon tai se voidaan asettaa saataville k\u00e4ytt\u00e4m\u00e4ll\u00e4 muita WordPressin tarjoamia toimintoja. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-01-wp-insert-term-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">T\u00e4ss\u00e4 esimerkiss\u00e4<\/a> aion k\u00e4ytt\u00e4\u00e4 <strong>getName()<\/strong> -funktiota <strong>$customPost-\u00a0<\/strong> objektissa.<\/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>Huomaa, ett\u00e4 luen my\u00f6s funktion tuloksen <strong>$termInfo-<\/strong> muuttujaan. K\u00e4yt\u00e4mme t\u00e4t\u00e4 seuraavassa vaiheessa etsi\u00e4ksemme yl\u00e4tason, jos se on olemassa, ja soveltaa sit\u00e4 my\u00f6s mukautettuun viestiobjektiin.<\/p>\n<h3>3 Etsi termin vanhempi<\/h3>\n<p>T\u00e4ss\u00e4 k\u00e4yt\u00e4mme juuri luomaamme termi\u00e4 n\u00e4hd\u00e4ksemme, onko sille olemassa vanhempi. Huomaa, ett\u00e4 jos se palauttaa ep\u00e4tosi, taksonomiaa ei ole olemassa (tai jos termi\u00e4 ei l\u00f6ydy).<\/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=\"WordPress-taksonomiat: ehdot, vanhemmat, lapset\" ><\/a><\/p>\n<p>T\u00e4t\u00e4 varten sinun kannattaa lis\u00e4t\u00e4 koodiisi ehto, jotta se voidaan tarvittaessa luoda. Jotta koodi pysyisi ytimekk\u00e4\u00e4n\u00e4, j\u00e4t\u00e4n sen pois <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-02-get-term-by-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavasta koodista<\/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>Huomaa, ett\u00e4 tallennan yll\u00e4 olevan koodin tuloksen <strong>$parentTermInfo-<\/strong> muuttujaan. T\u00e4m\u00e4 on, jotta voimme v\u00e4litt\u00e4\u00e4 t\u00e4m\u00e4n viimeiselle toiminnollemme, joka k\u00e4ytt\u00e4\u00e4 yl\u00e4tason tietoja viestiobjektiimme.<\/p>\n<h3>4 K\u00e4yt\u00e4 termi\u00e4 viestiin<\/h3>\n<p>Lopuksi k\u00e4yt\u00e4mme termi\u00e4 (tai termej\u00e4), jos emoobjekti on olemassa. Muista, ett\u00e4 t\u00e4ss\u00e4 tarvitaan ehdollista. Yksinkertaisesti sanottuna, jos yl\u00e4tasoa ei ole, <strong>$parentTermInfo[&#8217;parent&#8217;]-<\/strong> arvoa ei tarvita.<\/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=\"WordPress-taksonomiat: ehdot, vanhemmat, lapset\" ><\/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\">Mutta alla olevan koodin<\/a> osalta oletamme, ett\u00e4 meill\u00e4 on se.<\/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>Huomaa koodiviittauksesta, ett\u00e4 t\u00e4m\u00e4 luo termin, jos sit\u00e4 ei viel\u00e4 ole olemassa. muussa tapauksessa se k\u00e4ytt\u00e4\u00e4 jo m\u00e4\u00e4ritetty\u00e4 ja soveltaa sit\u00e4 viestiin.<\/p>\n<h2>Ja Valmis<\/h2>\n<p>Yleisesti ottaen se ei ole niin paljon ty\u00f6t\u00e4. Se auttaa varmistamaan, ett\u00e4 sinulla on selke\u00e4 k\u00e4sitys taksonomioiden ja niiden termien toiminnasta. Lis\u00e4ksi se auttaa my\u00f6s tiet\u00e4m\u00e4\u00e4n, kuinka noutaa tietyn termin yl\u00e4osa, jos haluat tehd\u00e4 sen (muuten kolmas vaihe ei ole v\u00e4ltt\u00e4m\u00e4t\u00f6n).<\/p>\n<p>Mutta toivottavasti yll\u00e4 olevat linkit ja koodi tarjoavat sinulle kaiken, mit\u00e4 tarvitset taksonomian luomiseen ja sen soveltamiseen viestiin (sek\u00e4 tarvittaessa p\u00e4\u00e4termi).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oletetaan, ett\u00e4 luot sellaisen ratkaisun, ett\u00e4 sinun on sovellettava siihen taksonomiaa. Lis\u00e4ksi haluat soveltaa viestiin my\u00f6s yl\u00e4taksonomiaa.<\/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":[719,834,803,864],"tags":[1166],"class_list":["post-231458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opas-aloittelijoille","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231458"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231458\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}