{"id":233638,"date":"2023-02-18T19:56:00","date_gmt":"2023-02-18T16:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233638"},"modified":"2023-02-23T17:35:00","modified_gmt":"2023-02-23T14:35:00","slug":"como-criar-um-formulario-front-end-com-o-acf","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-criar-um-formulario-front-end-com-o-acf\/","title":{"rendered":"Como criar um formul\u00e1rio front-end com o ACF"},"content":{"rendered":"\n<p>Neste tutorial, mostrarei como criar um formul\u00e1rio front-end com Advanced Custom Fields (ACF). Vou entrar em detalhes sobre como ele funciona e como voc\u00ea pode ajust\u00e1-lo para atender \u00e0s suas necessidades.<\/p>\n<p><a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) \u00e9 um plugin gratuito que ajuda voc\u00ea a adicionar configura\u00e7\u00f5es de campo de v\u00e1rios tipos a quase qualquer tipo de conte\u00fado no WordPress. Voc\u00ea pode adicionar campos a postagens, taxonomias, menus, widgets, usu\u00e1rios e at\u00e9 p\u00e1ginas de administra\u00e7\u00e3o personalizadas. Seu uso principal \u00e9 para admin, mas voc\u00ea pode us\u00e1-lo para gerar os campos no front-end tamb\u00e9m.<\/p>\n<p>As aplica\u00e7\u00f5es para adicionar campos ACF ao front-end s\u00e3o muitas; voc\u00ea pode adicionar um formul\u00e1rio para criar e atualizar postagens, categorias ou usu\u00e1rios. Com algum c\u00f3digo, voc\u00ea pode at\u00e9 criar um formul\u00e1rio de contato geral onde as respostas s\u00e3o salvas como postagens de tipo de postagem personalizadas e o c\u00f3digo aciona notifica\u00e7\u00f5es por e-mail nas respostas do formul\u00e1rio. Assim como um formul\u00e1rio de contato normal. Usar a funcionalidade de formul\u00e1rio front-end do ACF para criar formul\u00e1rios e permitir que os visitantes criem ou editem o conte\u00fado do site sem fazer login s\u00e3o os usos comuns. Mas use isso com cautela. Isso abre facilmente para spam e abuso e, na pior das hip\u00f3teses, os visitantes podem destruir o conte\u00fado ou as configura\u00e7\u00f5es do seu site. Voc\u00ea deve, no m\u00ednimo, exigir que os visitantes fa\u00e7am login com usu\u00e1rios v\u00e1lidos para obter acesso a formul\u00e1rios que podem alterar o conte\u00fado cr\u00edtico do WordPress (perfil do usu\u00e1rio, postagens etc.).<\/p>\n<h2>O que vamos fazer<\/h2>\n<p>Estou assumindo que o site WordPress definiu um conjunto de campos adicionais em usu\u00e1rios de uma fun\u00e7\u00e3o personalizada (&#8216; <code>member<\/code>&#8216;) usando o ACF. Esses usu\u00e1rios n\u00e3o t\u00eam acesso de administrador, mas queremos oferecer a eles a possibilidade de editar seus campos personalizados em seu perfil. A solu\u00e7\u00e3o que optei \u00e9 criar um template de p\u00e1gina customizado para atualiza\u00e7\u00e3o do perfil, apenas mostrando o formul\u00e1rio se estiverem logados e com a fun\u00e7\u00e3o correta.<\/p>\n<p>Estou mantendo isso bastante simples neste tutorial, ent\u00e3o n\u00e3o incluirei um exemplo de adi\u00e7\u00e3o de campos de perfil de usu\u00e1rio padr\u00e3o no WordPress (e-mail, senha, etc). Isso foge um pouco do escopo deste tutorial. S\u00f3 permitirei editar os campos ACF nesta p\u00e1gina de edi\u00e7\u00e3o de perfil.<\/p>\n<p>Com o ACF, criei um grupo de campos com um conjunto de configura\u00e7\u00f5es para usu\u00e1rios membros:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3424bfa.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-152752-61e4fa3424bfa.png\" alt=\"Como criar um formul\u00e1rio front-end com o ACF\"><\/a><\/p>\n<p>E eu tenho um modelo de p\u00e1gina personalizado no meu tema que atualmente se parece com isso \u2013 no momento apenas um modelo de p\u00e1gina simples padr\u00e3o;<\/p>\n<pre><code>&lt;?php \n\/* Template Name: ACF Profile Page *\/\nget_header(); ?&gt;\n&lt;main class=\"content\"&gt;\n    &lt;?php if (have_posts()) { \n        while (have_posts()): the_post(); ?&gt;\n        &lt;article id=\"post-&lt;?php the_ID() ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n            &lt;h2 class=\"page-title\"&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n            &lt;?php the_content(''); ?&gt;\n            &lt;?php \n            if (is_user_logged_in() &amp;&amp; current_user_can('member')) {\n                \/\/ Profile settings here\n            }\n            ?&gt;\n        &lt;\/article&gt;\n    &lt;?php endwhile;\n    } ?&gt;\n&lt;\/main&gt;\n&lt;?php \nget_sidebar();\nget_footer();<\/code><\/pre>\n<p>Na linha <code>#11<\/code>verificamos se o usu\u00e1rio atual est\u00e1 logado e tem o papel personalizado <code>member<\/code>. Altere a fun\u00e7\u00e3o ou regra m\u00ednima para o que voc\u00ea deseja permitir neste formul\u00e1rio de front-end. Apenas lembre-se de que mesmo o papel mais baixo no WordPress, <code>subscriber<\/code>, tem acesso \u00e0 edi\u00e7\u00e3o de seu perfil no painel de administra\u00e7\u00e3o.<\/p>\n<p>Resumindo, queremos adicionar esses campos em cada membro a essa p\u00e1gina de front-end personalizada:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa37478d8.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-152752-61e4fa37478d8.png\" alt=\"Como criar um formul\u00e1rio front-end com o ACF\"><\/a><\/p>\n<h2>Como os formul\u00e1rios front-end do ACF funcionam<\/h2>\n<p>Voc\u00ea precisa adicionar duas chamadas de fun\u00e7\u00e3o no modelo que deseja no formul\u00e1rio front-end; <code>[acf_form_head](https:\/\/www.advancedcustomfields.com\/resources\/acf_form_head\/)()<\/code>e <code>[acf_form](https:\/\/www.advancedcustomfields.com\/resources\/acf_form\/)()<\/code>.<\/p>\n<p>A fun\u00e7\u00e3o <code>acf_form_head()<\/code>deve ser colocada no topo do seu modelo, antes de qualquer sa\u00edda. Normalmente em um modelo isso significa antes <code>[get_header](https:\/\/developer.wordpress.org\/reference\/functions\/get_header\/)()<\/code>. A chamada de fun\u00e7\u00e3o garante que todos os scripts e estilos sejam adicionados para que os campos ACF sejam renderizados corretamente, assim como todas as funcionalidades para processamento, valida\u00e7\u00e3o e envio de trabalho. N\u00e3o precisamos adicionar nenhum par\u00e2metro a esta fun\u00e7\u00e3o.<\/p>\n<p>A <code>acf_form()<\/code>fun\u00e7\u00e3o \u00e9 aquela que renderiza o formul\u00e1rio front-end e deve ser colocada onde voc\u00ea deseja que o formul\u00e1rio apare\u00e7a. Ele aceita uma variedade de configura\u00e7\u00f5es. Precisamos informar no m\u00ednimo quais campos ou grupos mostrar e onde salv\u00e1-los.<\/p>\n<p>Quando se trata de decidir quais campos mostrar, voc\u00ea normalmente fornece um grupo de campos (propriedade <code>field_groups<\/code>). Mas a <code>acf_form()<\/code>fun\u00e7\u00e3o tamb\u00e9m suporta o fornecimento de campos \u00fanicos espec\u00edficos (propriedade <code>fields<\/code>). Voc\u00ea tamb\u00e9m pode fornecer v\u00e1rios campos ou grupos de campos para combin\u00e1-los no mesmo formul\u00e1rio. Devido a isso <code>field_groups<\/code>espera uma matriz. Portanto, mesmo que voc\u00ea queira mostrar apenas um grupo de campos, precisar\u00e1 fornecer esse ID ou slug dentro de uma matriz.<\/p>\n<p>A segunda propriedade obrigat\u00f3ria que voc\u00ea precisa fornecer <code>acf_form()<\/code>\u00e9 de onde os dados devem ser carregados e onde eles devem ser salvos, na propriedade <code>post_id<\/code>. N\u00e3o se deixe enganar pelo nome &#8216;post&#8217;. As regras para <code>post_id<\/code>s\u00e3o as mesmas quando voc\u00ea usa <code>get_field()<\/code>, se estiver familiarizado com o trabalho com o ACF antes. Se os campos forem para uma postagem (postagem, p\u00e1gina, postagem de tipo de postagem personalizada), voc\u00ea s\u00f3 precisa fornecer o ID aqui. Mas se voc\u00ea quiser carregar e atualizar dados sobre usu\u00e1rios, siga este formato: <code>user_{user ID}<\/code>. Da mesma forma com campos para uma categoria: <code>category_{category ID}<\/code>. Confira todas as regras sob o t\u00edtulo &quot;Obter um valor de objetos diferentes&quot; na <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/get_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o do ACF em<code>get_field()<\/code><\/a>.<\/p>\n<h2>Adicionando o formul\u00e1rio front-end do ACF ao nosso modelo<\/h2>\n<p>Primeiro adicionamos o <code>acf_form_head()<\/code>no topo, logo antes <code>get_header()<\/code>\u2013 mas depois da declara\u00e7\u00e3o do template de p\u00e1gina (line <code>#3<\/code>). Ent\u00e3o, no local onde queremos renderizar o formul\u00e1rio, adicionamos <code>acf_form()<\/code>duas propriedades.<\/p>\n<p>Precisamos descobrir nosso ID de grupo de campos. Se voc\u00ea adicionou o grupo de campos por c\u00f3digo (tenho um <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/referencia-completa-para-adicionar-grupos-de-campos-personalizados-avancados-e-campos-por-codigo\/\" title=\"post detalhado sobre como adicionar campos ACF por c\u00f3digo\">post detalhado sobre como adicionar campos ACF por c\u00f3digo<\/a> ), voc\u00ea j\u00e1 forneceu um slug de grupo de campos. Voc\u00ea ent\u00e3o forneceria o slug para a <code>field_groups<\/code>propriedade, em uma matriz. Se voc\u00ea adicionou o grupo de campos no painel de administra\u00e7\u00e3o, voc\u00ea precisa abrir o grupo no navegador e verificar a URL. Estamos interessados \u200b\u200bno ID que aparece depois de &#8221; <code>?post=<\/code>&#8220;:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3a1621b.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-152752-61e4fa3a1621b.png\" alt=\"Como criar um formul\u00e1rio front-end com o ACF\"><\/a><\/p>\n<p>No meu exemplo, o ID \u00e9 <code>1145<\/code>. Ent\u00e3o \u00e9 isso que eu forne\u00e7o na matriz de <code>field_groups<\/code>.<\/p>\n<p>PS: Eu n\u00e3o recomendo codificar um ID, pois esse ID ser\u00e1 diferente em cada inst\u00e2ncia do WordPress! Se voc\u00ea estiver trabalhando em uma instala\u00e7\u00e3o local, bem como em um servidor de teste e produ\u00e7\u00e3o, definitivamente recomendo adicionar os campos por c\u00f3digo. Dessa forma, voc\u00ea pode definir um nome de grupo de campos e ele funcionar\u00e1 em qualquer lugar.<\/p>\n<p>Quanto \u00e0 <code>post_id<\/code>propriedade, posso obter o ID do usu\u00e1rio atual usando a fun\u00e7\u00e3o do WordPress <code>[get_current_user_id](https:\/\/developer.wordpress.org\/reference\/functions\/get_current_user_id\/)()<\/code>. Eu concateno a string &#8216; <code>user_<\/code>&#8216; e o retorno desta fun\u00e7\u00e3o como <code>post_id<\/code>.<\/p>\n<pre><code>&lt;?php \n\/* Template Name: ACF Profile Page *\/\nacf_form_head();\nget_header(); ?&gt;\n&lt;main class=\"content\"&gt;\n    &lt;?php if (have_posts()) { \n        while (have_posts()): the_post(); ?&gt;\n        &lt;article id=\"post-&lt;?php the_ID() ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n            &lt;h2 class=\"page-title\"&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n            &lt;?php the_content(''); ?&gt;\n            &lt;?php \n            if (is_user_logged_in() &amp;&amp; current_user_can('member')) {\n                $current_user_id = get_current_user_id();\n                acf_form([\n                    'field_groups' =&gt; [1145],\n                    'post_id' =&gt; 'user_'. $current_user_id\n                ]);\n            }\n            ?&gt;\n        &lt;\/article&gt;\n    &lt;?php endwhile;\n    } ?&gt;\n&lt;\/main&gt;\n&lt;?php \nget_sidebar();\nget_footer();<\/code><\/pre>\n<p>E \u00e9 basicamente isso!<\/p>\n<p>Se eu visitar esta p\u00e1gina logado como usu\u00e1rio membro, obterei os valores atuais para esse usu\u00e1rio. Todos os tipos de campo ACF funcionam e t\u00eam boa apar\u00eancia. E posso atualizar os valores usando o formul\u00e1rio front-end e ver que eles tamb\u00e9m s\u00e3o atualizados no admin.<\/p>\n<h2>Personalizando ainda mais o formul\u00e1rio<\/h2>\n<p>Podemos ajustar ainda mais as configura\u00e7\u00f5es passadas para <code>acf_form()<\/code>. Consulte a <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/acf_form\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o do ACF em acf_form()<\/a> para ver todas as configura\u00e7\u00f5es poss\u00edveis.<\/p>\n<p>No momento, nosso formul\u00e1rio de perfil de usu\u00e1rio exibe &quot;Publica\u00e7\u00e3o atualizada&quot; quando as configura\u00e7\u00f5es s\u00e3o enviadas. Isso n\u00e3o faz sentido para as configura\u00e7\u00f5es de perfil. Podemos personalizar a mensagem com a propriedade <code>updated_message<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'updated_message' =&gt; __('User profile updated.', 'txtdomain')\n]);<\/code><\/pre>\n<p>Se desejar, voc\u00ea pode definir uma URL diferente para redirecionar ap\u00f3s o envio do formul\u00e1rio. Como padr\u00e3o, a mesma p\u00e1gina \u00e9 recarregada com o par\u00e2metro GET &#8216; <code>?updated=true<\/code>&#8216;. Voc\u00ea pode especificar um URL espec\u00edfico para uma p\u00e1gina de agradecimento ou, se o formul\u00e1rio for para uma postagem, talvez voc\u00ea queira redirecionar para visualizar essa postagem. Podemos fornecer a URL na propriedade <code>return<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'return' =&gt; home_url('thank-you')\n]);<\/code><\/pre>\n<p>Se quisermos um texto diferente no bot\u00e3o de envio do formul\u00e1rio, podemos especificar isso na propriedade <code>submit_value<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'submit_value' =&gt; __('Update profile', 'txtdomain')\n]);<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m pode dizer <code>acf_form()<\/code>para n\u00e3o renderizar a <code>&lt;form&gt;<\/code>tag. Se voc\u00ea quiser combinar o formul\u00e1rio do ACF com seu pr\u00f3prio formul\u00e1rio personalizado, voc\u00ea pode definir <code>form<\/code>e <code>false<\/code>digitar o <code>&lt;form&gt;<\/code>e <code>&lt;input type=\"submit\"\/&gt;<\/code>manualmente. Se voc\u00ea fizer isso, o ACF ainda poder\u00e1 atualizar os valores, mas voc\u00ea precisar\u00e1 atualizar quaisquer outros campos em seu formul\u00e1rio personalizado.<\/p>\n<pre><code>&lt;form method=\"POST\"&gt;\n    &lt;input type=\"text\" name=\"my-custom-input\" value=\"\" \/&gt;\n    &lt;?php\n    acf_form([\n        'field_groups' =&gt; [1145],\n        'post_id' =&gt; 'user_'. $current_user_id,\n        'form' =&gt; false\n    ]);\n    ?&gt;\n    &lt;input type=\"submit\" value=\"&lt;?php _e('Submit', 'txtdomain'); ?&gt;\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<h2>Acionando a\u00e7\u00f5es ao enviar formul\u00e1rios<\/h2>\n<p>\u00c0s vezes, voc\u00ea pode querer acionar alguma fun\u00e7\u00e3o ou eventos personalizados quando um formul\u00e1rio de front-end \u00e9 atualizado. Um exemplo comum \u00e9 escrever uma fun\u00e7\u00e3o que envia uma notifica\u00e7\u00e3o por email em cada envio de formul\u00e1rio.<\/p>\n<p>Campos personalizados avan\u00e7ados oferece dois ganchos \u00fateis para quando os campos s\u00e3o atualizados; a a\u00e7\u00e3o <code>[acf\/save_post](https:\/\/www.advancedcustomfields.com\/resources\/acf-save_post\/)<\/code>e o filtro <code>[acf\/pre_save_post](https:\/\/www.advancedcustomfields.com\/resources\/acf-pre_save_post\/)<\/code>. Novamente, n\u00e3o se deixe enganar pelo nome &#8216;post&#8217;. Eles s\u00e3o acionados para qualquer atualiza\u00e7\u00e3o de campos do ACF, incluindo campos para um usu\u00e1rio, categoria, menu e assim por diante.<\/p>\n<p>O filtro <code>acf\/pre_save_post<\/code>\u00e9 executado <strong>apenas<\/strong> em formul\u00e1rios front-end usando <code>acf_form()<\/code>. Como par\u00e2metro para este filtro temos, o <code>post_id<\/code>mesmo valor que passamos acima. O filtro espera que voc\u00ea retorne. Lembre-se de que precisamos analisar isso se n\u00e3o estivermos nos referindo a um ID de postagem. Por exemplo, para o usu\u00e1rio, voc\u00ea precisaria fazer algo como:<code>post_id``acf_form()``post_id<\/code><\/p>\n<pre><code>add_filter('acf\/pre_save_post', function($post_id) {\n    if (strpos($post_id, 'user_') === false) {\n        return $post_id;\n    }\n\u00a0\n    $user_id = intval(substr($post_id, 5));  \/\/ Extracts the user ID\n\u00a0\n    \/\/ Do your thing. You'll find the submitted values in $_POST\n\u00a0\n    return $post_id;\n});<\/code><\/pre>\n<p>Alternativamente, voc\u00ea pode usar o gancho <code>acf\/save_post<\/code>\u2013 mas lembre-se de que ele tamb\u00e9m \u00e9 acionado no admin. Como par\u00e2metro para este gancho, voc\u00ea obter\u00e1 <code>post_id<\/code>, o mesmo que <code>acf\/pre_save_post<\/code>. Uma coisa importante a ser lembrada ao usar <code>acf\/save_post<\/code>\u00e9 que voc\u00ea pode usar a prioridade do gancho para controlar se sua fun\u00e7\u00e3o \u00e9 executada antes dos campos serem salvos ou depois. Uma fun\u00e7\u00e3o vinculada \u00e0 prioridade 10 ou superior ser\u00e1 acionada depois que os campos forem salvos. E uma prioridade menor que 10 ser\u00e1 acionada antes que o ACF salve os valores.<\/p>\n<pre><code>add_action('acf\/save_post', function($post_id) {\n    \/\/ You can fetch the values with standard get_field()\n});\n\u00a0\nadd_action('acf\/save_post', function($post_id) {\n    \/\/ You can access the submitted values in $_POST\n}, 8);<\/code><\/pre>\n<p>Quando voc\u00ea enganchou a fun\u00e7\u00e3o antes de salvar (prioridade menor que 10), voc\u00ea pode comparar os valores enviados com o que o ACF salvar\u00e1. Voc\u00ea pode fazer <code>get_field()<\/code>para obter o valor atual e compar\u00e1-los com o valor correspondente em <code>$_POST<\/code>.<\/p>\n<p>Se voc\u00ea quiser fazer algo apenas quando os campos forem atualizados no front-end, basta verificar se estamos em admin com <code>[is_admin](https:\/\/developer.wordpress.org\/reference\/functions\/is_admin\/)()<\/code>. Abaixo est\u00e1 um exemplo de como voc\u00ea configuraria notifica\u00e7\u00f5es por e-mail quando um usu\u00e1rio estiver atualizando suas configura\u00e7\u00f5es no front-end;<\/p>\n<pre><code>add_action('acf\/save_post', function($post_id) {\n    if (strpos($post_id, 'user_') === false) {\n        return $post_id;\n    }\n\u00a0\n    if (is_admin()) {\n        return;  \/\/ Bail if we are updating in admin\n    }\n\u00a0\n    $user_id = intval(substr($post_id, 5));\n\u00a0\n    \/\/ Use get_field() to get the saved\/submitted values if needed\n    \/\/ Then use wp_mail() to send an email\n});<\/code><\/pre>\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>Como criar um formul\u00e1rio front-end com campos personalizados avan\u00e7ados (ACF). Vou entrar em detalhes sobre como ele funciona e como voc\u00ea pode ajust\u00e1-lo para atender \u00e0s suas necessidades.<\/p>\n","protected":false},"author":1,"featured_media":224889,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,722,837,1110,816,816,837,846,846,867,867],"tags":[1170],"class_list":["post-233638","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-guia-para-iniciantes","category-n-a","category-plug-ins","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233638","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=233638"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233638\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}