{"id":233483,"date":"2023-02-14T17:36:00","date_gmt":"2023-02-14T14:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233483"},"modified":"2022-11-10T23:56:13","modified_gmt":"2022-11-10T20:56:13","slug":"como-preencher-dinamicamente-configuracoes-avancadas-de-campos-personalizados","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-preencher-dinamicamente-configuracoes-avancadas-de-campos-personalizados\/","title":{"rendered":"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados"},"content":{"rendered":"\n<p>Com algum c\u00f3digo PHP, \u00e9 muito f\u00e1cil preencher dinamicamente um valor ou op\u00e7\u00f5es <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de campos personalizados avan\u00e7ados<\/a> (ACF). Voc\u00ea pode fazer isso para qualquer tipo de entrada, incluindo as op\u00e7\u00f5es de r\u00e1dio, caixas de sele\u00e7\u00e3o e similares. Neste post veremos como.<\/p>\n<h2>O filtro<\/h2>\n<p>Campos personalizados avan\u00e7ados oferece um filtro chamado <code>[acf\/load_field](https:\/\/www.advancedcustomfields.com\/resources\/acf-load_field\/)<\/code>. Voc\u00ea pode usar esse filtro de v\u00e1rias maneiras diferentes. Filtre <code>acf\/load_field<\/code>para aplic\u00e1-lo a todos os tipos de campos ou inclua c\u00f3digo dentro de sua fun\u00e7\u00e3o de gancho para descobrir qual tipo de campo ou nome voc\u00ea deseja. Ou voc\u00ea pode especificar o tipo de campo (<code>acf\/load_field\/type=&lt;type&gt;<\/code>), nome (<code>acf\/load_field\/name=&lt;name&gt;<\/code>) ou chave (<code>acf\/load_field\/key=&lt;key&gt;<\/code>).<\/p>\n<p>Suponha que criamos um campo de texto assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bc7809d8.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-153292-61e50bc7809d8.png\" alt=\"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados\" ><\/a><\/p>\n<p>Poder\u00edamos direcionar isso por <code>acf\/load_field\/name=dyn_pop_example<\/code>(segmenta apenas este campo espec\u00edfico), <code>acf\/load_field\/type=text<\/code>(aplica-se a todos os campos do tipo texto) ou <code>acf\/load_field<\/code>(aplica-se a todos os campos de qualquer tipo ou nome). Ao usar os dois \u00faltimos filtros, voc\u00ea pode, \u00e9 claro, entrar no destino da fun\u00e7\u00e3o por informa\u00e7\u00f5es de campo espec\u00edficas, como nome. Cada campo no ACF tamb\u00e9m recebe uma chave exclusiva, mas eles est\u00e3o ocultos e s\u00e3o principalmente para uso interno do ACF.<\/p>\n<p>O filtro fornece uma vari\u00e1vel; a matriz de campo. Esta matriz fornece todas as informa\u00e7\u00f5es sobre o campo atual. O que voc\u00ea faz \u00e9 simplesmente alterar as informa\u00e7\u00f5es no array e retornar o array de campo modificado. Dependendo do tipo de campo, os elementos na matriz diferem. Por exemplo, tipos de campo de escolha m\u00faltipla, como select e radioboxes, ter\u00e3o um elemento de matriz &#8216; <code>choices<\/code>&#8216; que campos do tipo texto, por exemplo, n\u00e3o ter\u00e3o. Eu recomendo que voc\u00ea fa\u00e7a um <code>var_dump()<\/code>dos arrays fornecidos para ver a que tipo de informa\u00e7\u00e3o voc\u00ea tem acesso.<\/p>\n<p>Vamos come\u00e7ar a olhar para algum c\u00f3digo real!<\/p>\n<h2>Popula\u00e7\u00e3o: exemplos simples<\/h2>\n<p>Definir o valor padr\u00e3o de uma entrada de texto seria algo assim:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $field['default_value'] = __('This is default value', 'txtdomain');\n    return $field;\n});<\/code><\/pre>\n<p>N\u00f3s direcionamos nossa entrada de texto com o nome <code>dyn_pop_example<\/code>e definimos seu valor padr\u00e3o (chave &#8216; <code>default_value<\/code>&#8216;) para uma string de nossa pr\u00f3pria escolha. O campo ser\u00e1 ent\u00e3o renderizado assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bc94e2b7.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-153292-61e50bc94e2b7.png\" alt=\"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados\" ><\/a><\/p>\n<p>Voc\u00ea pode modificar qualquer configura\u00e7\u00e3o para o campo. No exemplo abaixo definimos o placeholder e as instru\u00e7\u00f5es do texto:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $field['placeholder'] = __('Type in here', 'txtdomain');\n    $field['instructions'] = __('Some instructions coming from code', 'txtdomain');\n    return $field;\n});<\/code><\/pre>\n<p>O que far\u00e1 o campo renderizar assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bcabf334.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-153292-61e50bcabf334.png\" alt=\"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados\" ><\/a><\/p>\n<h2>Preencher op\u00e7\u00f5es<\/h2>\n<p>Se voc\u00ea deseja preencher dinamicamente as op\u00e7\u00f5es de um campo de sele\u00e7\u00e3o, r\u00e1dio ou caixa de sele\u00e7\u00e3o, fa\u00e7a isso no elemento-chave da matriz &#8216; <code>choices<\/code>&#8216;. Este <code>choices<\/code>elemento &#8216; &#8216; aplica-se a todos os campos do tipo select, radio e checkbox.<\/p>\n<p>O <code>choices<\/code>elemento &#8216; &#8216; precisa ser uma matriz de pares chave + valor. As chaves s\u00e3o os valores (que ser\u00e3o salvos) e os valores s\u00e3o o r\u00f3tulo que aparece como a escolha.<\/p>\n<p>Suponha que alteramos nosso campo para um select. Voc\u00ea pode deixar as op\u00e7\u00f5es em branco, pois elas ser\u00e3o definidas atrav\u00e9s do nosso c\u00f3digo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bcc5cf44.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-153292-61e50bcc5cf44.png\" alt=\"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados\" ><\/a><\/p>\n<p>Para preencher as escolhas do select fazemos assim:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $choices = [\n        'red' =&gt; __('Red Color', 'txtdomain'),\n        'blue' =&gt; __('Blue Color', 'txtdomain'),\n        'green' =&gt; __('Green Color', 'txtdomain')\n    ];\n    $field['choices'] = $choices;\n    $field['default_value'] = 'blue';\n    return $field;\n});<\/code><\/pre>\n<p>Na linha <code>#2 - #6<\/code>n\u00f3s simplesmente definimos um array de escolhas. Modifique isso de acordo com suas necessidades. Na linha <code>#7<\/code>atribu\u00edmos as escolhas do campo ao nosso array. Para uma boa medida, tamb\u00e9m definimos o valor padr\u00e3o do campo. Isso n\u00e3o \u00e9 necess\u00e1rio \u2013 sem linha <code>#8<\/code>o select simplesmente escolheria automaticamente a primeira escolha no array (&#8216;red&#8217;).<\/p>\n<p>O c\u00f3digo acima renderizar\u00e1 o campo assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bce2ff52.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-153292-61e50bce2ff52.png\" alt=\"Como preencher dinamicamente configura\u00e7\u00f5es avan\u00e7adas de campos personalizados\" ><\/a><\/p>\n<p>As escolhas s\u00e3o com voc\u00ea, tudo o que voc\u00ea precisa cuidar \u00e9 fornecer uma matriz de chave + valor adequada para o <code>choices<\/code>elemento &#8216; &#8216; do campo. Como exemplo b\u00e1sico, este exemplo de c\u00f3digo mostra como voc\u00ea pode transformar um campo de sele\u00e7\u00e3o normal em uma escolha de postagens.<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $posts = new WP_Query([\n        'post_type' =&gt; 'page',\n        'posts_per_page' =&gt; -1\n    ]);\n    $choices = [];\n    while ($posts-&gt;have_posts()) { \n        $posts-&gt;the_post();\n        $choices[get_the_ID()] = get_the_title();\n    }\n    wp_reset_query();\n    $field['choices'] = $choices;\n    return $field;\n});<\/code><\/pre>\n<p>O exemplo de c\u00f3digo acima faz uma consulta de postagem buscando todas as p\u00e1ginas e preenche a matriz de op\u00e7\u00f5es com IDs de postagem como chaves e os t\u00edtulos de postagem como valores. Este \u00e9 apenas um exemplo; se voc\u00ea for fazer uma escolha de postagens, o ACF oferece outros tipos de campo especificamente para isso.<\/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>Com o PHP \u00e9 muito f\u00e1cil preencher dinamicamente qualquer tipo de valor ou op\u00e7\u00f5es do campo Advanced Custom Fields (ACF). Neste post veremos como.<\/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":[898,898,722,722,837,920,1110,920,837,846,846,867,867],"tags":[1170],"class_list":["post-233483","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-outro","category-n-a","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233483","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=233483"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233483\/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=233483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}