{"id":233908,"date":"2023-02-24T09:54:00","date_gmt":"2023-02-24T06:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233908"},"modified":"2022-11-11T13:07:17","modified_gmt":"2022-11-11T10:07:17","slug":"aprenda-a-escrever-caminhantes-de-menu-para-menus-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/aprenda-a-escrever-caminhantes-de-menu-para-menus-do-wordpress\/","title":{"rendered":"Aprenda a escrever caminhantes de menu para menus do WordPress"},"content":{"rendered":"\n<p>O WordPress permite usar as chamadas classes Walker para percorrer e exibir elementos em uma estrutura hier\u00e1rquica. Neste post vamos aprender como criar, implementar e customizar nossa pr\u00f3pria classe walker para customizar a sa\u00edda do nosso menu.<\/p>\n<p>O uso mais conhecido de personaliza\u00e7\u00e3o com classes Walker no WordPress \u00e9 para menus, mas, na realidade, o WordPress usa classes Walker para v\u00e1rios casos, por exemplo, gerando hierarquias de taxonomia, hierarquias de coment\u00e1rios <code>[wp_list_pages](https:\/\/developer.wordpress.org\/reference\/functions\/wp_list_pages\/)()<\/code>e arquivos <code>[wp_list_categories](https:\/\/developer.wordpress.org\/reference\/functions\/wp_list_categories\/)()<\/code>. Todos eles estendem uma <code>Walker<\/code>classe geral. Vamos estender o <code>Walker_Nav_Menu<\/code>que \u00e9 usado para menus no WordPress.<\/p>\n<p>Como estendemos outra classe, precisamos apenas adicionar as fun\u00e7\u00f5es que desejamos substituir. Se uma fun\u00e7\u00e3o n\u00e3o existir em nossa classe, o WordPress executar\u00e1 a fun\u00e7\u00e3o da classe pai&#8217; (a classe que estendemos).<\/p>\n<h2>Prepara\u00e7\u00e3o<\/h2>\n<p>Voc\u00ea pode adicionar sua classe walker em seus arquivos de plugin, temas <code>function.php<\/code>ou qualquer arquivo PHP inclu\u00eddo por <code>functions.php<\/code>(para um c\u00f3digo mais limpo). Voc\u00ea come\u00e7a definindo sua classe por um nome de sua escolha (certifique-se de que o nome da classe seja \u00fanico, e isso inclui poss\u00edveis nomes de classe no n\u00facleo do WordPress!) estendendo <code>Walker_Nav_Menu<\/code>:<\/p>\n<pre><code>class AWP_Menu_Walker extends Walker_Nav_Menu {\n}<\/code><\/pre>\n<p>Para dizer ao WordPress para usar nosso walker, definimos isso em nossas <code>[wp_nav_menu](https:\/\/developer.wordpress.org\/reference\/functions\/wp_nav_menu\/)()<\/code>chamadas. Esta fun\u00e7\u00e3o \u00e9 respons\u00e1vel pela sa\u00edda de um menu e voc\u00ea provavelmente tem pelo menos um em seu tema para o menu principal.<\/p>\n<p>No array de argumentos para <code>wp_nav_menu()<\/code>voc\u00ea adiciona um novo elemento com a chave &#8216;walker&#8217; e cria uma nova inst\u00e2ncia de sua classe walker assim:<\/p>\n<pre><code>wp_nav_menu([\n    'theme_location' =&gt; 'primary',\n    'menu_class' =&gt; 'main-menu',\n    'container' =&gt; 'nav',\n    'container_class' =&gt; 'header__main-nav',\n    'walker' =&gt; new AWP_Menu_Walker()\n]);<\/code><\/pre>\n<p>Se voc\u00ea atualizar seu site, n\u00e3o dever\u00e1 ver nenhuma altera\u00e7\u00e3o. Isso ocorre porque nossa classe n\u00e3o substitui nenhuma das fun\u00e7\u00f5es do pai e, portanto, o WordPress simplesmente executa as fun\u00e7\u00f5es normais do menu walker ao gerar o menu, assim como antes dissemos a ele para usar nosso walker.<\/p>\n<h2>Vis\u00e3o geral das fun\u00e7\u00f5es que podemos substituir em<code>Walker_Nav_Menu<\/code><\/h2>\n<p>A seguir est\u00e3o as fun\u00e7\u00f5es que voc\u00ea pode adicionar \u00e0 sua classe walker personalizada para substituir as fun\u00e7\u00f5es da classe parental <code>Walker_Nav_Menu<\/code>:<\/p>\n<p>As quatro primeiras s\u00e3o fun\u00e7\u00f5es que s\u00e3o simplesmente respons\u00e1veis \u200b\u200bpela sa\u00edda, e todas elas exigem que voc\u00ea anexe a uma string \u2013 a primeira vari\u00e1vel de par\u00e2metro. \u00c9 importante saber que voc\u00ea n\u00e3o faz <code>echo<\/code>nada aqui, tudo deve ser constru\u00eddo como uma corda.<\/p>\n<h3>start_lvl<\/h3>\n<p>A fun\u00e7\u00e3o <code>start_lvl<\/code>\u00e9 respons\u00e1vel pela sa\u00edda do HTML para o in\u00edcio de um novo n\u00edvel. Em suma, deve produzir o arquivo <code>&lt;ul&gt;<\/code>.<\/p>\n<pre><code>function start_lvl(&amp;$output, $depth=0, $args=null) { }<\/code><\/pre>\n<p>O primeiro par\u00e2metro, <code>$output<\/code>\u2013 passado por refer\u00eancia, \u00e9 a string \u00e0 qual voc\u00ea anexar\u00e1 sua sa\u00edda. <code>$depth<\/code>\u00e9 um n\u00famero inteiro sinalizando em que n\u00edvel voc\u00ea est\u00e1; 0 para n\u00edvel superior, 1 para filho direto do n\u00edvel superior e assim por diante. <code>$args<\/code>\u00e9 um objeto de todos os argumentos fornecidos em <code>wp_nav_menu()<\/code>.<\/p>\n<h3>end_lvl<\/h3>\n<p>A <code>end_lvl<\/code>fun\u00e7\u00e3o \u00e9 respons\u00e1vel pela sa\u00edda do HTML para o final de um n\u00edvel. Isso geralmente \u00e9 apenas o fechamento <code>&lt;\/ul&gt;<\/code>.<\/p>\n<pre><code>function end_lvl(&amp;$output, $depth=0, $args=null) { }<\/code><\/pre>\n<p>Os par\u00e2metros s\u00e3o exatamente os mesmos <code>start_lvl<\/code>acima.<\/p>\n<h3>start_el<\/h3>\n<p>Esta fun\u00e7\u00e3o \u00e9 respons\u00e1vel pela sa\u00edda do HTML de cada elemento. Em suma, deve gerar o in\u00edcio <code>&lt;li&gt;<\/code>e a <code>&lt;a&gt;<\/code>tag com o t\u00edtulo do link dentro.<\/p>\n<pre><code>function start_el(&amp;$output, $item, $depth=0, $args=null, $id=0) { }<\/code><\/pre>\n<p>O primeiro argumento, <code>$output<\/code>, \u00e9 como de costume a string \u00e0 qual voc\u00ea anexar\u00e1 a sa\u00edda. O segundo argumento, <code>$item<\/code>, \u00e9 o objeto de item de menu \u2013 e \u00e9 aqui que voc\u00ea buscar\u00e1 a maioria dos dados para a sa\u00edda do item de menu. Se o link do menu for um item de menu de postagem, voc\u00ea obter\u00e1 o objeto de postagem aqui. Independentemente do tipo de menu, voc\u00ea tamb\u00e9m ter\u00e1 alguns elementos \u00fateis adicionais; como <code>classes<\/code>, <code>url<\/code>, <code>title<\/code>e <code>description<\/code>.<\/p>\n<p>O terceiro argumento, <code>$depth<\/code>, \u00e9 um inteiro informando em que n\u00edvel estamos. O n\u00edvel 0 \u00e9 o n\u00edvel superior, 1 \u00e9 filho direto do n\u00edvel superior e assim por diante. O quarto argumento, <code>$args<\/code>, \u00e9 um objeto de todos os argumentos fornecidos a <code>wp_nav_menu()<\/code>. O quinto par\u00e2metro, <code>$id<\/code>, \u00e9 o ID do item de menu atual.<\/p>\n<h3>end_el<\/h3>\n<p>A <code>end_el<\/code>fun\u00e7\u00e3o \u00e9 respons\u00e1vel por emitir o fechamento de um elemento. Normalmente, seria apenas a sa\u00edda da <code>&lt;\/li&gt;<\/code>tag.<\/p>\n<pre><code>function end_el(&amp;$output, $item, $depth=0, $args=null) { }<\/code><\/pre>\n<p>Os argumentos para <code>end_el<\/code>s\u00e3o os mesmos <code>start_el<\/code>acima, exceto que a fun\u00e7\u00e3o n\u00e3o possui o quinto par\u00e2metro, <code>$id<\/code>.<\/p>\n<h3>display_element<\/h3>\n<p>A fun\u00e7\u00e3o <code>display_element<\/code>\u00e9 uma fun\u00e7\u00e3o herdada da <code>Walker<\/code>classe geral e \u00e9 a fun\u00e7\u00e3o respons\u00e1vel pela travessia. Esta \u00e9 a fun\u00e7\u00e3o que chama todas as fun\u00e7\u00f5es acima por sua vez.<\/p>\n<p>Estou incluindo isso aqui porque em alguns casos, por exemplo, se voc\u00ea quiser evitar atravessar uma ramifica\u00e7\u00e3o inteira, voc\u00ea usaria essa fun\u00e7\u00e3o para isso.<\/p>\n<pre><code>function display_element($element, &amp;$children_elements, $max_depth, $depth, $args, &amp;$output) { }<\/code><\/pre>\n<p>O primeiro argumento, <code>$element<\/code>, \u00e9 o objeto de item de menu \u2013 isso \u00e9 o que \u00e9 passado como <code>$item<\/code>nas fun\u00e7\u00f5es acima. O segundo argumento, <code>$children_elements<\/code>\u2013 passado por refer\u00eancia, cont\u00e9m todos os elementos filho que esta fun\u00e7\u00e3o percorrer\u00e1. <code>$max_depth<\/code>, o terceiro argumento, \u00e9 um n\u00famero inteiro que sinaliza a profundidade que devemos percorrer, e o quarto argumento, <code>$depth<\/code>, \u00e9 a profundidade em que estamos atualmente. O quinto argumento, <code>$args<\/code>, s\u00e3o os argumentos passados \u200b\u200bpara a fun\u00e7\u00e3o que chamou o walker (para menus seriam os argumentos fornecidos para <code>wp_nav_menu()<\/code>), e o argumento final, <code>$output<\/code>\u2013 passado por refer\u00eancia, \u00e9 a sa\u00edda que \u00e9 passada como primeiro argumento em todos os das fun\u00e7\u00f5es acima.<\/p>\n<h2>Modificando a sa\u00edda de cada elemento<\/h2>\n<p>Na vis\u00e3o geral acima voc\u00ea deve ver que a fun\u00e7\u00e3o <code>start_el()<\/code>\u00e9 a respons\u00e1vel pela sa\u00edda do HTML para um \u00fanico elemento de menu. Vamos come\u00e7ar substituindo essa fun\u00e7\u00e3o em nossa classe walker com um exemplo simples.<\/p>\n<h3>Exemplo: impedindo a adi\u00e7\u00e3o de links para elementos &#8216;#&#8217;<\/h3>\n<p>Vamos nos certificar de que qualquer <code>#<\/code>link &#8216; &#8216; receba um <code>&lt;span&gt;<\/code>elemento em vez de uma tag de link, para evitar a atualiza\u00e7\u00e3o da p\u00e1gina.<\/p>\n<pre><code>class AWP_Menu_Walker extends Walker_Nav_Menu {\n    function start_el(&amp;$output, $item, $depth=0, $args=[], $id=0) {\n        $output .= \"&lt;li class='\". implode(\" \", $item-&gt;classes). \"'&gt;\";\n\u00a0\n        if ($item-&gt;url &amp;&amp; $item-&gt;url != '#') {\n            $output .= '&lt;a href=\"'. $item-&gt;url. '\"&gt;';\n        } else {\n            $output .= '&lt;span&gt;';\n        }\n\u00a0\n        $output .= $item-&gt;title;\n\u00a0\n        if ($item-&gt;url &amp;&amp; $item-&gt;url != '#') {\n            $output .= '&lt;\/a&gt;';\n        } else {\n            $output .= '&lt;\/span&gt;';\n        }\n    }\n}<\/code><\/pre>\n<p>Iniciaremos o elemento anexando uma <code>&lt;li&gt;<\/code>tag a <code>$output<\/code>. Queremos ter certeza de que as classes padr\u00e3o do WordPress (por exemplo &#8216;menu-item&#8217;, &#8216;menu-item-has-children&#8217; etc), bem como as classes inseridas manualmente no editor de menu, sejam adicionadas ao nosso elemento de lista. N\u00f3s colamos as classes fornecidas como um array <code>$item-&gt;classes<\/code>usando a fun\u00e7\u00e3o PHP <code>[implode](https:\/\/www.php.net\/manual\/en\/function.implode.php)()<\/code>separando cada elemento com um espa\u00e7o.<\/p>\n<p>Na linha #5-9 e #13-17 n\u00f3s tratamos a sa\u00edda condicional do elemento de encapsulamento. Emitimos uma <code>&lt;a&gt;<\/code>tag, a menos que a URL do elemento seja &#8216; <code>#<\/code>&#8216; nesse caso, fornecemos uma <code>&lt;span&gt;<\/code>tag. Na linha #11 n\u00f3s simplesmente produzimos o texto do link, que reside em <code>$item-&gt;title<\/code>.<\/p>\n<p>Isso \u00e9 tudo o que precisamos para garantir que todos os elementos de menu que tenham &#8216; <code>#<\/code>&#8216; como URL n\u00e3o sejam clic\u00e1veis!<\/p>\n<p>Se voc\u00ea estiver fazendo isso em um tema estilizado, lembre-se de que poder\u00e1 perder algum estilo se o tema tiver estilizado a <code>&lt;a&gt;<\/code>tag diretamente. Voc\u00ea pode resolver isso alterando o estilo e possivelmente adicionando uma classe ao elemento span.<\/p>\n<h3>Exemplo: exibi\u00e7\u00e3o de descri\u00e7\u00f5es de itens de menu<\/h3>\n<p>Como exemplo, outra coisa que voc\u00ea pode fazer aqui \u00e9 gerar a descri\u00e7\u00e3o do menu. Isso existe, mas n\u00e3o est\u00e1 ativado como padr\u00e3o. No editor de menus do WordPress, voc\u00ea precisa clicar em &quot;Op\u00e7\u00f5es de tela&quot; no canto superior direito e marcar para mostrar &quot;Descri\u00e7\u00e3o&quot;:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151802-61e4cfd7d3371.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-151802-61e4cfd7d3371.png\" alt=\"Aprenda a escrever caminhantes de menu para menus do WordPress\" ><\/a><\/p>\n<p>Isso permite que o usu\u00e1rio insira uma descri\u00e7\u00e3o para cada elemento. Voc\u00ea pode produzir essa descri\u00e7\u00e3o em sua classe de walker. Digamos que voc\u00ea queira mostrar apenas a descri\u00e7\u00e3o dos itens de n\u00edvel superior, pois isso faz parte do design do seu tema. Voc\u00ea pode simplesmente verificar se <code>$item<\/code>tem uma descri\u00e7\u00e3o e se <code>$depth<\/code>\u00e9 0, assim:<\/p>\n<pre><code>        ...\n        $output .= $item-&gt;title;\n\u00a0\n        if ($depth == 0 &amp;&amp; !empty($item-&gt;description)) {\n            $output .= '&lt;span class=\"description\"&gt;'. $item-&gt;description. '&lt;\/span&gt;';\n        }\n        ...<\/code><\/pre>\n<h3>Exemplo: adicionar acentos de lista suspensa<\/h3>\n<p>Um exemplo mais comum e \u00fatil \u00e9 adicionar um &#8220;caret&quot;, um \u00edcone que sinaliza que este item de menu possui um menu suspenso (tem elementos filhos).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151802-61e4cfd965e21.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-151802-61e4cfd965e21.png\" alt=\"Aprenda a escrever caminhantes de menu para menus do WordPress\" ><\/a><\/p>\n<p>Exemplo de acento circunflexo em a\u00e7\u00e3o \u2013 atr\u00e1s de &#8220;Blog&#8221; e &#8220;Not\u00edcias&#8221;<\/p>\n<p>Voc\u00ea precisar\u00e1 descobrir sua sa\u00edda HTML de acento circunflexo. No meu caso estou gerando um <code>&lt;i&gt;<\/code>item com classes espec\u00edficas para uma bela seta para baixo dispon\u00edvel pela biblioteca <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fontawesome<\/a> que fornece milhares de \u00edcones. Voc\u00ea tamb\u00e9m deseja garantir que esse acento circunflexo seja gerado apenas em elementos que tenham filhos. A melhor maneira que encontrei para descobrir se o elemento atual tem filhos, \u00e9 referenciando o objeto walker (sim, que \u00e9 o nosso walker em si, mas tamb\u00e9m as classes que ele estende!) em <code>$args<\/code>, e verificando o boolean <code>has_children<\/code>. A sa\u00edda de um acento circunflexo \u00e9 t\u00e3o simples quanto:<\/p>\n<pre><code>if ($args-&gt;walker-&gt;has_children) {\n    $output .= '&lt;i class=\"caret fa fa-angle-down\"&gt;&lt;\/i&gt;';\n}<\/code><\/pre>\n<p>A classe walker completa ficaria assim:<\/p>\n<pre><code>class AWP_Menu_Walker extends Walker_Nav_Menu {\n    function start_el(&amp;$output, $item, $depth=0, $args=[], $id=0) {\n        $output .= \"&lt;li class='\". implode(\" \", $item-&gt;classes). \"'&gt;\";\n\u00a0\n        if ($item-&gt;url &amp;&amp; $item-&gt;url != '#') {\n            $output .= '&lt;a href=\"'. $item-&gt;url. '\"&gt;';\n        } else {\n            $output .= '&lt;span&gt;';\n        }\n\u00a0\n        $output .= $item-&gt;title;\n\u00a0\n        if ($item-&gt;url &amp;&amp; $item-&gt;url != '#') {\n            $output .= '&lt;\/a&gt;';\n        } else {\n            $output .= '&lt;\/span&gt;';\n        }\n\u00a0\n        if ($args-&gt;walker-&gt;has_children) {\n            $output .= '&lt;i class=\"caret fa fa-angle-down\"&gt;&lt;\/i&gt;';\n        }\n    }\n}<\/code><\/pre>\n<p>E isso \u00e9 tudo que voc\u00ea precisa para garantir que seu menu tenha bons \u00edcones de acento circunflexo nos elementos pai e que <code>#<\/code>os links &#8216; &#8216; n\u00e3o sejam clic\u00e1veis.<\/p>\n<p>Se voc\u00ea quiser que o \u00edcone de acento circunflexo mude, por exemplo, em uma seta para cima quando o menu suspenso estiver ativo, voc\u00ea precisar\u00e1 adicion\u00e1-lo com Javascript ao seu tema.<\/p>\n<p>Como os exemplos acima sugerem, voc\u00ea pode manipular a sa\u00edda como quiser, com base em quaisquer condicionais. Voc\u00ea pode, por exemplo, modificar a sa\u00edda com base na presen\u00e7a de uma determinada classe (por exemplo, uma classe inserida manualmente no editor de menus) procurando a classe em <code>$item-&gt;classes<\/code>, ou pode manipular (por exemplo, capitalizar) o texto do item de sa\u00edda fornecido em <code>$item-&gt;title<\/code>.<\/p>\n<h2>Fornecendo argumentos ao seu caminhante atrav\u00e9s do seu<code>wp_nav_menu<\/code><\/h2>\n<p>Eu gostaria de mencionar outra coisa \u00fatil. Lembre-se de que $args cont\u00e9m todos os argumentos fornecidos para <code>wp_nav_menu()<\/code>. Isso inclui, por exemplo <code>theme_location<\/code>, e outros, portanto, se voc\u00ea puder modificar a sa\u00edda apenas para locais espec\u00edficos do tema &#8211; por exemplo, menu principal. Mas voc\u00ea pode realmente fornecer quaisquer argumentos personalizados!<\/p>\n<p>Digamos que voc\u00ea esteja exibindo o mesmo menu v\u00e1rias vezes, por exemplo, um para desktop e novamente para celular. Ou voc\u00ea quer que seu walker manipule os itens apenas quando eles s\u00e3o exibidos <code>wp_nav_menu()<\/code>em seu tema, e n\u00e3o quando o menu \u00e9 adicionado por meio de um widget? Talvez voc\u00ea queira que seu andador lide com a sa\u00edda de maneira diferente nesses casos?<\/p>\n<p>Voc\u00ea pode fornecer quaisquer argumentos personalizados para <code>wp_nav_menu()<\/code>. Como um exemplo simples, adicionarei um booleano &#8216; <code>show_carets<\/code>&#8216; aos argumentos para garantir que os acentos circunflexos sejam adicionados apenas nos casos em que eu os desejar \u2013 em vez de minha classe walker adicionar acentos circunflexos a todos os menus.<\/p>\n<pre><code>wp_nav_menu([\n    'theme_location' =&gt; 'primary',\n    'menu_class' =&gt; 'main-menu',\n    'container' =&gt; 'nav',\n    'container_class' =&gt; 'header__main-nav',\n    'walker' =&gt; new AWP_Menu_Walker(),\n    'show_carets' =&gt; true\n]);<\/code><\/pre>\n<p>Ent\u00e3o, posso simplesmente alterar meu c\u00f3digo de adi\u00e7\u00e3o de acento circunflexo acima (linha # 19-21) para verificar se <code>show_carets<\/code>est\u00e1 ou n\u00e3o presente e verdadeiro em <code>$args<\/code>, assim:<\/p>\n<pre><code>if ($args-&gt;show_carets &amp;&amp; $args-&gt;walker-&gt;has_children) {\n    $output .= '&lt;i class=\"caret fa fa-angle-down\"&gt;&lt;\/i&gt;';\n}<\/code><\/pre>\n<p>Voc\u00ea pode adicionar quaisquer argumentos que desejar, garantindo que seu andador personalize apenas os menus que voc\u00ea deseja. Por exemplo, booleanos simples para diferentes casos, por exemplo <code>is_mobile_menu<\/code>, ou qualquer outra coisa que voc\u00ea precise.<\/p>\n<p>E \u00e9 isso. Sinta-se \u00e0 vontade para experimentar e deixe-me saber se voc\u00ea tiver alguma d\u00favida ou sugest\u00e3o abaixo!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste post vamos aprender como criar, implementar e customizar nossa pr\u00f3pria classe walker para customizar nossa sa\u00edda de menu no WordPress.<\/p>\n","protected":false},"author":1,"featured_media":224083,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[930,898,898,920,1110,920,930,846,846,867,867],"tags":[1170],"class_list":{"0":"post-233908","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-assuntos","8":"category-codigo-2","10":"category-outro","11":"category-n-a","14":"category-tutoriais","16":"category-wordpress-8","18":"tag-affiai-pt-pt"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233908","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=233908"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233908\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}