{"id":234014,"date":"2023-02-27T14:24:00","date_gmt":"2023-02-27T11:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234014"},"modified":"2022-11-11T13:53:49","modified_gmt":"2022-11-11T10:53:49","slug":"formularios-de-gravidade-adicione-entradas-personalizadas-aos-campos-e-postagem-remota-apos-o-envio","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/formularios-de-gravidade-adicione-entradas-personalizadas-aos-campos-e-postagem-remota-apos-o-envio\/","title":{"rendered":"Formul\u00e1rios de gravidade: adicione entradas personalizadas aos campos e postagem remota ap\u00f3s o envio"},"content":{"rendered":"\n<p>Neste tutorial do Gravity Forms, aprenderemos tr\u00eas coisas:<\/p>\n<ul>\n<li>Como adicionar uma entrada personalizada a qualquer tipo de campo de sua escolha<\/li>\n<li>Como adicionar configura\u00e7\u00f5es personalizadas ao seu formul\u00e1rio<\/li>\n<li>E, finalmente, como postar remotamente valores enviados para campos espec\u00edficos ap\u00f3s cada envio de formul\u00e1rio.<\/li>\n<\/ul>\n<p>Esta postagem pressup\u00f5e que voc\u00ea deseja adicionar funcionalidade ao Gravity Forms para enviar uma solicita\u00e7\u00e3o de postagem remota ap\u00f3s cada envio de formul\u00e1rio. Dentro da postagem remota, voc\u00ea enviar\u00e1 valores do formul\u00e1rio, que s\u00e3o personaliz\u00e1veis \u200b\u200bpor configura\u00e7\u00f5es adicionais no editor de formul\u00e1rios. Exemplos comuns de onde isso seria \u00fatil s\u00e3o enviar, por exemplo, nome e e-mail para uma lista de newsletter do Mailchimp, ou realmente qualquer outra integra\u00e7\u00e3o de terceiros.<\/p>\n<p>A maneira de resolver isso na pr\u00e1tica \u00e9 primeiro adicionar configura\u00e7\u00f5es personalizadas a cada campo, onde o editor pode digitar os nomes das chaves. A chave e seus valores enviados ser\u00e3o enviados para um URL de terceiros ap\u00f3s cada envio de formul\u00e1rio. Tamb\u00e9m adicionaremos uma configura\u00e7\u00e3o para que voc\u00ea possa escolher para cada formul\u00e1rio ativar esse tipo de envio de terceiros.<\/p>\n<p>Todo o c\u00f3digo abaixo pode ser colocado no c\u00f3digo do seu tema <code>functions.php<\/code>ou plugin.<\/p>\n<h2>Adicionando uma entrada personalizada aos campos<\/h2>\n<p>A primeira etapa \u00e9 adicionar a entrada aos campos no editor de campo onde voc\u00ea pode digitar o nome da chave para esse valor. Somente incluiremos e enviaremos valores onde essa entrada foi preenchida.<\/p>\n<h3>Escolhendo onde colocar sua entrada<\/h3>\n<p>Gravity Forms oferece ganchos que podemos usar para adicionar coisas personalizadas no editor de campo. O nome do gancho depende de qual guia voc\u00ea deseja que seu campo apare\u00e7a.<\/p>\n<ul>\n<li>&quot;Guia geral:<code>gform_field_standard_settings<\/code><\/li>\n<li>Aba &#8220;Apar\u00eancia&quot;:<code>gform_field_appearance_settings<\/code><\/li>\n<li>Aba &#8220;Avan\u00e7ado&#8221;:<code>gform_field_advanced_settings<\/code><\/li>\n<\/ul>\n<p>Em cada gancho voc\u00ea ter\u00e1 dois par\u00e2metros; posi\u00e7\u00e3o e ID do formul\u00e1rio. Cada configura\u00e7\u00e3o de Gravity Forms integrada tem um n\u00famero de posi\u00e7\u00e3o fixo. Voc\u00ea pode comparar esse n\u00famero para decidir exatamente onde deseja que seu HTML personalizado ou entrada esteja. Listar todas as configura\u00e7\u00f5es e sua posi\u00e7\u00e3o seria muito longo neste post. Mas o Gravity Forms adiciona suas configura\u00e7\u00f5es em incrementos de 5. Por exemplo, na aba General, o &#8220;Field label&#8221; est\u00e1 na posi\u00e7\u00e3o 0 e &#8220;Description&#8221; est\u00e1 na posi\u00e7\u00e3o 10. Colocar seu HTML na posi\u00e7\u00e3o 10 far\u00e1 com que ele apare\u00e7a ap\u00f3s Description. N\u00e3o compare a posi\u00e7\u00e3o com nenhum n\u00famero que n\u00e3o seja um multiplicador de 5.<\/p>\n<p>Estou adicionando meu campo personalizado na guia Avan\u00e7ado, na posi\u00e7\u00e3o 50, que fica logo ap\u00f3s a entrada &#8220;Admin Field Label&#8221;.<\/p>\n<pre><code>add_action('gform_field_advanced_settings', function($position, $form_id) {\n    if ($position == 50) {  \/\/ right after Admin Field Label\n        ?&gt;\n        &lt;li class=\"thirdparty_input_setting field_setting\"&gt;\n            &lt;label for=\"field_admin_label\"&gt;\n                &lt;?php _e('Third party input field', 'txtdomain'); ?&gt;\n            &lt;\/label&gt;\n            &lt;input type=\"text\" id=\"field_thirdparty_input\" onchange=\"SetFieldProperty('thirdPartyInput', this.value);\" class=\"fieldwidth-3\" \/&gt;\n        &lt;\/li&gt;\n        &lt;?php\n    }   \n}, 10, 2);<\/code><\/pre>\n<p>A maior parte do c\u00f3digo acima \u00e9 autoexplicativo. Estou adicionando HTML no mesmo formato que o Gravity Forms esperaria uma configura\u00e7\u00e3o. No entanto, na entrada em si, voc\u00ea precisa fornecer uma <code>onchange<\/code>fun\u00e7\u00e3o Javascript. N\u00f3s simplesmente dizemos a ele para executar a fun\u00e7\u00e3o do GravityForms para salvar quaisquer altera\u00e7\u00f5es feitas em nossa entrada. A propriedade que fornecemos em <code>SetFieldProperty<\/code>, <code>thirdPartyInput<\/code>, \u00e9 importante lembrar, dentro dessa chave \u00e9 onde nossa entrada personalizada ser\u00e1 salva no array de campos do Gravity Forms ao enviar.<\/p>\n<h3>Adicionando uma dica de ferramenta (opcional)<\/h3>\n<p>Voc\u00ea pode fazer outra coisa opcional com sua entrada; adicionar uma dica de ferramenta. Se voc\u00ea quiser isso, adicione esta chamada de fun\u00e7\u00e3o dentro do c\u00f3digo que voc\u00ea acabou de adicionar e forne\u00e7a uma chave (\u00fanica) como string:<\/p>\n<pre><code>            ...\n            &lt;label for=\"field_admin_label\"&gt;\n                &lt;?php _e('Third party input field', 'txtdomain'); ?&gt;\n                &lt;?php gform_tooltip('form_field_thirdparty_input'); ?&gt;\n            &lt;\/label&gt;\n            ...<\/code><\/pre>\n<p>E, em seguida, adicione outra fun\u00e7\u00e3o que se conecte ao filtro <code>gform_tooltips<\/code>e adicione o conte\u00fado da dica de ferramenta \u00e0 chave correspondente, assim:<\/p>\n<pre><code>add_filter('gform_tooltips', function($tooltips) {\n    $tooltips['form_field_thirdparty_input'] = __('&lt;h6&gt;Third party input&lt;\/h6&gt;If you want to submit this field to third party, type in key name here. Remember to activate form submission to third party in form settings.', 'txtdomain');\n    return $tooltips;\n});<\/code><\/pre>\n<p>Adicionar uma dica de ferramenta \u00e9 totalmente opcional, mas uma boa maneira de explicar aos propriet\u00e1rios do site o que essa entrada faz. Modifique o conte\u00fado para o que se adapta \u00e0 sua funcionalidade.<\/p>\n<h3>Definindo quais tipos de campo adicionar sua entrada personalizada<\/h3>\n<p>Voc\u00ea pode notar que seu campo n\u00e3o est\u00e1 aparecendo em nenhuma guia Avan\u00e7ado. Isso ocorre porque precisamos informar ao Gravity Forms em quais tipos de campo queremos que essa entrada apare\u00e7a. Por padr\u00e3o, ela n\u00e3o aparecer\u00e1 em nenhum.<\/p>\n<p>A maneira como fazemos isso \u00e9, na verdade, com Javascript. O GravityForms possui Javascript que oculta automaticamente todas as configura\u00e7\u00f5es e, em seguida, opta por exibir as espec\u00edficas com base no tipo de campo. Ent\u00e3o nosso campo est\u00e1 l\u00e1, mas o Gravity Forms simplesmente o escondeu.<\/p>\n<p>N\u00f3s nos <code>gform_editor_js<\/code>ligamos e precisamos fazer duas coisas. Primeiro, decidimos em quais tipos de campo a entrada deve aparecer. E, em segundo lugar, nos certificamos de que a entrada seja preenchida com seu valor no carregamento.<\/p>\n<p>Estou adicionando a entrada aos tipos de campo <code>text<\/code>, <code>textarea<\/code>, <code>email<\/code>, <code>phone<\/code>e <code>number<\/code>. Lembre-se de considerar como voc\u00ea vai lidar com os valores dos campos enviados. Se voc\u00ea optar por permitir esse campo, por exemplo, no tipo de campo de caixa de sele\u00e7\u00e3o, dever\u00e1 ser capaz de analisar e manipular os valores enviados corretamente.<\/p>\n<pre><code>add_action('gform_editor_js', function() {\n    ?&gt;\n    &lt;script type=\"text\/javascript\"&gt;\n        \/\/ Add our setting to these field types\n        fieldSettings.text += ', .thirdparty_input_setting';\n        fieldSettings.textarea += ', .thirdparty_input_setting';\n        fieldSettings.email += ', .thirdparty_input_setting';\n        fieldSettings.phone += ', .thirdparty_input_setting';\n        fieldSettings.number += ', .thirdparty_input_setting';\n\u00a0\n        \/\/ Make sure our field gets populated with its saved value\n        jQuery(document).on(\"gform_load_field_settings\", function(event, field, form) {\n                jQuery(\"#field_thirdparty_input\").val(field[\"thirdPartyInput\"]);\n            });\n    &lt;\/script&gt;\n    &lt;?php\n});<\/code><\/pre>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151326-61e4ca26275b1.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-151326-61e4ca26275b1.png\" alt=\"Formul\u00e1rios de gravidade: adicione entradas personalizadas aos campos e postagem remota ap\u00f3s o envio\" ><\/a><\/p>\n<p>Agora, finalmente, voc\u00ea poder\u00e1 ver sua entrada personalizada na guia Avan\u00e7ado, se o campo for de qualquer um dos tipos fornecidos. Voc\u00ea tamb\u00e9m ver\u00e1 que ele foi salvo com sucesso e \u00e9 carregado com seu valor salvo. Sempre que o formul\u00e1rio for enviado a partir de agora, se esta entrada for preenchida, o array do campo do formul\u00e1rio conter\u00e1 a propriedade <code>thirdPartyInput<\/code>.<\/p>\n<p>O pr\u00f3ximo passo \u00e9 adicionar uma configura\u00e7\u00e3o no pr\u00f3prio formul\u00e1rio para ativar o envio para terceiros. Isso \u00e9 opcional, mas recomendado. Queremos evitar a execu\u00e7\u00e3o de c\u00f3digo desnecess\u00e1rio ou enviar algo para terceiros quando n\u00e3o pretendemos.<\/p>\n<h2>Adicionando uma configura\u00e7\u00e3o personalizada \u00e0s configura\u00e7\u00f5es do formul\u00e1rio<\/h2>\n<p>Adicionar configura\u00e7\u00f5es personalizadas \u00e0s configura\u00e7\u00f5es do formul\u00e1rio \u00e9 bastante simples. Precisamos nos conectar ao filtro <code>gform_form_settings<\/code>e anexar nosso HTML com quaisquer entradas que voc\u00ea desejar, e depois no filtro <code>gform_pre_form_settings_save<\/code>e garantir que nossas entradas personalizadas sejam salvas no objeto de formul\u00e1rio.<\/p>\n<p>\u00c9 assim que voc\u00ea adicionaria uma configura\u00e7\u00e3o personalizada \u00e0s configura\u00e7\u00f5es do formul\u00e1rio:<\/p>\n<pre><code>add_filter('gform_form_settings', function($settings, $form) {\n    $settings[__('3rd party Settings', 'txtdomain')]['submit_3rd_party'] = '\n        &lt;tr&gt;\n            &lt;th&gt;'.__('Submit form to 3rd party', 'txtdomain').'&lt;\/th&gt;\n            &lt;td&gt;\n                &lt;input type=\"checkbox\" value=\"1\" id=\"gform_submit_3rd_party\" name=\"submit_3rd_party\" '.checked(rgar($form, 'submit_3rd_party'), '1', false).' \/&gt;\n                &lt;label for=\"gform_submit_3rd_party\"&gt;'.__('Activate submission', 'txtdomain').'&lt;\/label&gt;\n            &lt;\/td&gt;\n        &lt;\/tr&gt;\n    ';\n    return $settings;\n}, 10, 2);<\/code><\/pre>\n<p>O filtro gform_form_settings espera que as chaves sejam um r\u00f3tulo de se\u00e7\u00e3o e, em seguida, uma matriz para cada configura\u00e7\u00e3o. Adicionamos apenas um com a chave <code>submit_3rd_party<\/code>. Na pr\u00f3pria entrada da caixa de sele\u00e7\u00e3o, usamos o m\u00e9todo do Gravity Forms <code>rgar()<\/code>para extrair valores de uma determinada chave de um array (o formul\u00e1rio), para garantir que buscamos o valor salvo do nosso campo. Modifique o HTML para atender \u00e0s suas necessidades.<\/p>\n<p>O campo aparecer\u00e1 agora na parte inferior das configura\u00e7\u00f5es do formul\u00e1rio. Mas ainda n\u00e3o salvar\u00e1 suas altera\u00e7\u00f5es, ent\u00e3o precisamos corrigir isso:<\/p>\n<pre><code>add_filter('gform_pre_form_settings_save', function($form) {\n    $form['submit_3rd_party'] = rgpost('submit_3rd_party');\n    return $form;\n}, 10, 2);<\/code><\/pre>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151326-61e4ca26ef08c.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-151326-61e4ca26ef08c.png\" alt=\"Formul\u00e1rios de gravidade: adicione entradas personalizadas aos campos e postagem remota ap\u00f3s o envio\" ><\/a><\/p>\n<p>Este peda\u00e7o de c\u00f3digo usa outro dos m\u00e9todos auxiliares do Gravity Forms, <code>rgpost()<\/code>, para extrair valores enviados (de <code>$_POST<\/code>) e os salva no array de formul\u00e1rio fornecido com nossa chave desejada. Se voc\u00ea adicionar mais configura\u00e7\u00f5es, ser\u00e1 necess\u00e1rio repetir isso para cada configura\u00e7\u00e3o.<\/p>\n<p>E \u00e9 tudo o que precisamos para adicionar configura\u00e7\u00f5es de formul\u00e1rio personalizadas! Sempre que voc\u00ea tiver acesso ao objeto de formul\u00e1rio, poder\u00e1 verificar o valor de <code>$form['submit_3rd_party']<\/code>.<\/p>\n<h2>Enviar valores enviados para terceiros<\/h2>\n<p>Um bom gancho a ser usado para a\u00e7\u00f5es personalizadas, como realizar uma solicita\u00e7\u00e3o e enviar dados de um formul\u00e1rio enviado, \u00e9 <code>gform_after_submission<\/code>. Neste ponto, toda a valida\u00e7\u00e3o foi aprovada e o objeto de entrada (resposta) foi criado. Com este gancho temos acesso ao objeto de entrada e ao objeto de formul\u00e1rio.<\/p>\n<p>O que voc\u00ea faz nesta a\u00e7\u00e3o \u00e9 com voc\u00ea e como voc\u00ea precisa extrair os dados e como voc\u00ea realiza a solicita\u00e7\u00e3o de postagem. Quanto a este exemplo, estou fazendo uma simples solicita\u00e7\u00e3o de postagem usando a fun\u00e7\u00e3o do WordPress <code>wp_remote_post()<\/code>com uma matriz de todos os campos que preencheram nossa entrada personalizada no corpo.<\/p>\n<p>Voc\u00ea ver\u00e1 que primeiro verifico se o formul\u00e1rio ativou envios. Se tiver o c\u00f3digo percorre todos os campos do formul\u00e1rio e verifica se cada campo adicionou algo em nossa entrada personalizada. Se a entrada realmente n\u00e3o estiver vazia, o c\u00f3digo tamb\u00e9m verifica se alguma coisa foi enviada para este campo. Voc\u00ea pode remover este if-check se estiver bem para enviar valores vazios.<\/p>\n<pre><code>add_action('gform_after_submission', function($entry, $form) {\n    if ($form['submit_3rd_party']) {\n        $fields_to_send = [];\n        foreach ($form['fields'] as $field_key =&gt; $field) {\n            if (isset($field-&gt;thirdPartyInput) &amp;&amp; !empty($field-&gt;thirdPartyInput)) {\n\u00a0\n                if (isset($entry[$field-&gt;id]) &amp;&amp; !empty($entry[$field-&gt;id])) {\n                    $fields_to_send[$field-&gt;thirdPartyInput] = $entry[$field-&gt;id];\n                }\n            }\n        }\n\u00a0\n        \/\/ Don't send request if there are no fields to send\n        if (empty($fields_to_send)) {\n            return;\n        }\n\u00a0\n        $url = 'http:\/\/url.to.3rd.party.com\/';\n        $response = wp_remote_post($url, ['body' =&gt; $fields_to_send]);\n    }\n}, 10, 2);<\/code><\/pre>\n<p>A parte sobre o URL e como os dados ser\u00e3o enviados \u00e9 algo que voc\u00ea obviamente precisar\u00e1 ajustar. Voc\u00ea tamb\u00e9m pode, opcionalmente, fazer algo com a resposta, por exemplo, enviar um e-mail se houver falha ou algo assim. Depende de voc\u00ea como voc\u00ea deseja lidar com sua funcionalidade.<\/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>Um tutorial do Gravity Forms sobre como adicionar uma entrada personalizada a qualquer tipo de campo, adicionar configura\u00e7\u00f5es de formul\u00e1rio personalizado e enviar valores de formul\u00e1rio remoto para terceiros.<\/p>\n","protected":false},"author":1,"featured_media":151327,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[1110,816,816,846,846,867,867],"tags":[1170],"class_list":["post-234014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","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\/234014","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=234014"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/234014\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/151327"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=234014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=234014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=234014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}