{"id":231455,"date":"2022-12-21T13:03:00","date_gmt":"2022-12-21T10:03:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231455"},"modified":"2022-12-07T10:26:50","modified_gmt":"2022-12-07T07:26:50","slug":"taxonomias-do-wordpress-termos-pais-filhos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/taxonomias-do-wordpress-termos-pais-filhos\/","title":{"rendered":"Taxonomias do WordPress: Termos, Pais, Filhos"},"content":{"rendered":"\n<p>Criar taxonomias programaticamente parece ser um ponto que surge de vez em quando para quem est\u00e1 construindo solu\u00e7\u00f5es para outros no WordPress.<\/p>\n<p>As pr\u00f3prias taxonomias podem at\u00e9 ser um pouco confusas; no entanto, descobri que o seguinte geralmente ajuda a solidificar um pouco o conceito:<\/p>\n<p>As taxonomias hier\u00e1rquicas s\u00e3o an\u00e1logas \u00e0s categorias; taxonomias n\u00e3o hier\u00e1rquicas s\u00e3o an\u00e1logas a tags.<\/p>\n<p>Mas ainda assim, digamos que voc\u00ea esteja criando uma solu\u00e7\u00e3o para algu\u00e9m que precise importar informa\u00e7\u00f5es como uma postagem e aplicar uma taxonomia a ela. Al\u00e9m disso, talvez voc\u00ea tamb\u00e9m queira aplicar uma taxonomia pai \u00e0 postagem.<\/p>\n<p>Como podemos fazer isso?<\/p>\n<h2>Taxonomias do WordPress: registro, pais, filhos e muito mais<\/h2>\n<p>A situa\u00e7\u00e3o \u00e9 mais ou menos assim:<\/p>\n<p>Voc\u00ea tem uma postagem \u00e0 qual uma taxonomia ser\u00e1 aplicada. Se a taxonomia tiver um pai, tamb\u00e9m queremos aplic\u00e1-la ao post.<\/p>\n<p>Para fazer isso, precisaremos de quatro (talvez cinco) fun\u00e7\u00f5es:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/register_taxonomy\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">registrar_taxonomia<\/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>Eu tamb\u00e9m acrescentarei que acho uma boa ideia usar <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/sanitize_title_with_dashes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repair_title_with_dashes<\/a> se voc\u00ea for usar algum tipo de string de entrada n\u00e3o higienizada para o slug do tipo post (mas n\u00e3o \u00e9 necess\u00e1rio se voc\u00ea n\u00e3o estiver, \u00e9 claro ).<\/p>\n<h3>1 Registre a Taxonomia<\/h3>\n<p>Para este exemplo, vamos criar uma taxonomia para um tipo de postagem personalizado.<\/p>\n<p>Como isso pode ser qualquer coisa com a qual voc\u00ea esteja trabalhando, vou usar uma vari\u00e1vel chamada <strong>$postType<\/strong> para demonstrar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-00-register-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o ponto<\/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>\u00c9 bastante simples, mas observe <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a refer\u00eancia de c\u00f3digo<\/a> :<\/p>\n<blockquote>\n<p>Uma fun\u00e7\u00e3o simples para criar ou modificar um objeto de taxonomia com base nos par\u00e2metros fornecidos. Ao modificar um objeto de taxonomia existente, observe que o <code>$object_type<\/code>valor do registro original ser\u00e1 substitu\u00eddo.<\/p>\n<\/blockquote>\n<p>Geralmente, isso n\u00e3o \u00e9 um problema, mas se voc\u00ea estiver trabalhando em um aplicativo grande ou pr\u00e9-existente, \u00e9 algo a ter em mente.<\/p>\n<h3>2 Insira um Termo para a Taxonomia<\/h3>\n<p>Em seguida, suponha que um <strong>$customPost<\/strong> seja disponibilizado para voc\u00ea e tenha uma fun\u00e7\u00e3o para recuperar seu nome, seu t\u00edtulo ou alguma outra propriedade usada para identific\u00e1-lo (al\u00e9m de seu ID).<\/p>\n<\/p>\n<p>Isso pode ser passado para uma fun\u00e7\u00e3o ou pode ser disponibilizado por meio de qualquer uso de outras fun\u00e7\u00f5es que o WordPress fornece. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-01-wp-insert-term-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Neste exemplo<\/a>, usarei uma\u00a0 fun\u00e7\u00e3o <strong>getName()<\/strong> no objeto <strong>$customPost\u00a0<\/strong>.<\/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>Observe que tamb\u00e9m estou lendo o resultado da fun\u00e7\u00e3o em uma\u00a0 vari\u00e1vel <strong>$termInfo<\/strong>. Usaremos isso na pr\u00f3xima etapa para procurar o pai, se ele existir, e tamb\u00e9m aplic\u00e1-lo ao nosso objeto de postagem personalizado.<\/p>\n<h3>3 Procure o pai de um termo<\/h3>\n<p>Aqui, usaremos o termo que acabamos de criar para ver se existe um pai para ele. Observe que, se retornar false, a taxonomia n\u00e3o existe (ou se o termo n\u00e3o for encontrado).<\/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=\"Taxonomias do WordPress: Termos, Pais, Filhos\" ><\/a><\/p>\n<p>Para esse fim, voc\u00ea desejar\u00e1 adicionar uma condicional ao seu c\u00f3digo para cri\u00e1-lo, se necess\u00e1rio. Para manter o c\u00f3digo conciso, por\u00e9m, estou omitindo- <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-02-get-term-by-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o no seguinte c\u00f3digo<\/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>Observe que armazeno o resultado do c\u00f3digo acima em uma\u00a0 vari\u00e1vel <strong>$parentTermInfo<\/strong>. Isso \u00e9 para que possamos passar isso para nossa fun\u00e7\u00e3o final para aplicar a informa\u00e7\u00e3o pai ao nosso objeto post.<\/p>\n<h3>4 Aplicar o termo a uma postagem<\/h3>\n<p>Por fim, aplicaremos o termo (ou termos) se houver um objeto pai. Lembre-se que \u00e9 aqui que a condicional ser\u00e1 necess\u00e1ria. Simplificando, se n\u00e3o houver pai, o <strong>valor $parentTermInfo[&#8216;parent&#8217;]<\/strong> n\u00e3o ser\u00e1 necess\u00e1rio.<\/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=\"Taxonomias do WordPress: Termos, Pais, Filhos\" ><\/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\">Mas para o c\u00f3digo abaixo<\/a>, estamos assumindo que o temos.<\/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 refer\u00eancia de c\u00f3digo, observe que isso criar\u00e1 o termo se ele ainda n\u00e3o existir; caso contr\u00e1rio, ele usar\u00e1 o que j\u00e1 est\u00e1 definido e o aplicar\u00e1 ao post.<\/p>\n<h2>E feito<\/h2>\n<p>De um modo geral, n\u00e3o \u00e9 muito trabalho. Isso ajuda a garantir que voc\u00ea tenha uma compreens\u00e3o clara de como funcionam as taxonomias e seus termos. Al\u00e9m disso, tamb\u00e9m ajuda saber como recuperar o pai de um determinado termo se for isso que voc\u00ea deseja fazer (caso contr\u00e1rio, a terceira etapa n\u00e3o ser\u00e1 necess\u00e1ria).<\/p>\n<p>Mas esperamos que os links e o c\u00f3digo acima forne\u00e7am tudo o que voc\u00ea precisa para criar uma taxonomia e aplic\u00e1-la a uma postagem (assim como a um termo pai, se necess\u00e1rio).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Digamos que voc\u00ea esteja criando uma solu\u00e7\u00e3o que precise aplicar uma taxonomia a ela. Al\u00e9m disso, voc\u00ea tamb\u00e9m deseja aplicar uma taxonomia pai \u00e0 postagem.<\/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":[722,837,806,867],"tags":[1170],"class_list":["post-231455","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231455"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231455\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}