{"id":234017,"date":"2023-02-27T14:28:00","date_gmt":"2023-02-27T11:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234017"},"modified":"2022-11-11T13:56:01","modified_gmt":"2022-11-11T10:56:01","slug":"moduli-di-gravita-aggiungi-input-personalizzati-ai-campi-e-ai-messaggi-remoti-dopo-linvio","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/moduli-di-gravita-aggiungi-input-personalizzati-ai-campi-e-ai-messaggi-remoti-dopo-linvio\/","title":{"rendered":"Moduli di gravit\u00e0: aggiungi input personalizzati ai campi e ai messaggi remoti dopo l&#8217;invio"},"content":{"rendered":"\n<p>In questo tutorial su Gravity Forms impareremo tre cose:<\/p>\n<ul>\n<li>Come aggiungere un input personalizzato a qualsiasi tipo di campo di tua scelta<\/li>\n<li>Come aggiungere impostazioni personalizzate al tuo modulo<\/li>\n<li>E infine come inviare in remoto i valori inviati per campi specifici dopo ogni invio di moduli.<\/li>\n<\/ul>\n<p>Questo post presuppone che tu voglia aggiungere funzionalit\u00e0 a Gravity Forms per inviare una richiesta di post remota dopo ogni invio del modulo. All&#8217;interno del post remoto invierai i valori dal modulo, che sono personalizzabili con impostazioni aggiuntive nell&#8217;editor del modulo. Esempi comuni di dove ci\u00f2 sarebbe utile sono l&#8217;invio, ad esempio, di nome ed e-mail a un elenco di newsletter di Mailchimp o qualsiasi altra integrazione di terze parti.<\/p>\n<p>Il modo per risolvere questo problema in pratica \u00e8 prima aggiungere impostazioni personalizzate a ciascun campo, in cui l&#8217;editor pu\u00f2 digitare i nomi delle chiavi. La chiave e i relativi valori inviati verranno inviati a un URL di terze parti dopo ogni invio del modulo. Aggiungeremo anche un&#8217;impostazione in modo che tu possa scegliere per ogni modulo di attivare questo tipo di invio di terze parti.<\/p>\n<p>Tutto il codice seguente pu\u00f2 essere inserito nel codice del tuo tema <code>functions.php<\/code>o del plugin.<\/p>\n<h2>Aggiunta di un input personalizzato ai campi<\/h2>\n<p>Il primo passaggio consiste nell&#8217;aggiungere l&#8217;input ai campi nell&#8217;editor dei campi in cui \u00e8 possibile digitare il nome della chiave per questo valore. Includeremo e invieremo solo i valori in cui questo input \u00e8 stato compilato.<\/p>\n<h3>Scegliere dove posizionare il tuo input<\/h3>\n<p>Gravity Forms offre hook che possiamo utilizzare per aggiungere elementi personalizzati nell&#8217;editor di campo. Il nome dell&#8217;hook dipende dalla scheda in cui vuoi che appaia il tuo campo.<\/p>\n<ul>\n<li>&quot;Scheda Generale:<code>gform_field_standard_settings<\/code><\/li>\n<li>Scheda &quot;Aspetto&quot;:<code>gform_field_appearance_settings<\/code><\/li>\n<li>Scheda &quot;Avanzate&quot;:<code>gform_field_advanced_settings<\/code><\/li>\n<\/ul>\n<p>In ogni hook avrai due parametri; posizione e ID modulo. Ogni impostazione Gravity Forms incorporata ha un numero di posizione fisso. Puoi confrontare questo numero per decidere esattamente dove vuoi che sia il tuo codice HTML personalizzato o input. Elencare tutte le impostazioni e la loro posizione sarebbe troppo lungo in questo post. Ma Gravity Forms aggiunge le loro impostazioni con incrementi di 5. Ad esempio, nella scheda Generale, &quot;Etichetta campo&quot; \u00e8 in posizione 0 e &quot;Descrizione&quot; \u00e8 in posizione 10. Mettere il tuo HTML in posizione 10 lo far\u00e0 apparire dopo Descrizione. Non confrontare la posizione con un numero che non sia un moltiplicatore di 5.<\/p>\n<p>Sto aggiungendo il mio campo personalizzato nella scheda Avanzate, nella posizione 50, che si trova subito dopo l&#8217;immissione di &quot;Etichetta campo amministratore&quot;.<\/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>La maggior parte del codice sopra \u00e8 autoesplicativo. Sto aggiungendo HTML nello stesso formato di Gravity Forms si aspetterebbe che ci sia un&#8217;impostazione. Tuttavia, sull&#8217;input stesso \u00e8 necessario fornire una <code>onchange<\/code>funzione Javascript. Gli diciamo semplicemente di eseguire la funzione di GravityForms per salvare le modifiche apportate al nostro input. La propriet\u00e0 che forniamo in <code>SetFieldProperty<\/code>, <code>thirdPartyInput<\/code>, \u00e8 importante da ricordare, all&#8217;interno di questa chiave \u00e8 dove il nostro input personalizzato verr\u00e0 salvato nell&#8217;array dei campi di Gravity Forms durante l&#8217;invio.<\/p>\n<h3>Aggiunta di una descrizione comando (opzionale)<\/h3>\n<p>Puoi fare un&#8217;altra cosa opzionale con il tuo input; aggiungi un suggerimento. Se lo desideri, aggiungi questa chiamata di funzione all&#8217;interno del codice che hai appena aggiunto e fornisci una chiave (unica) come stringa:<\/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>Quindi aggiungi un&#8217;altra funzione che si aggancia al filtro <code>gform_tooltips<\/code>e aggiungi il contenuto della descrizione comando alla chiave corrispondente, in questo modo:<\/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>L&#8217;aggiunta di una descrizione comando \u00e8 completamente facoltativa, ma \u00e8 un bel modo per spiegare ai proprietari del sito cosa fa questo input. Modifica il contenuto in base alle tue funzionalit\u00e0.<\/p>\n<h3>Definire quali tipi di campo aggiungere il tuo input personalizzato<\/h3>\n<p>Potresti notare che il tuo campo non viene visualizzato in nessuna scheda Avanzate. Questo perch\u00e9 dobbiamo dire a Gravity Forms in quali tipi di campo vogliamo che appaia questo input. Di default non apparir\u00e0 in nessuno.<\/p>\n<p>Il modo in cui lo facciamo \u00e8 in realt\u00e0 con Javascript. GravityForms ha Javascript che nasconde automaticamente tutte le impostazioni e quindi sceglie di visualizzare quelle specifiche in base al tipo di campo. Quindi il nostro campo \u00e8 l\u00ec, ma Gravity Forms lo ha semplicemente nascosto.<\/p>\n<p>Ci colleghiamo <code>gform_editor_js<\/code>e dobbiamo fare due cose. Per prima cosa decidiamo in quali tipi di campo deve apparire l&#8217;input. E in secondo luogo ci assicuriamo che l&#8217;input venga popolato con il suo valore al caricamento.<\/p>\n<p>Sto aggiungendo l&#8217;input ai tipi di campo <code>text<\/code>, <code>textarea<\/code>, <code>email<\/code>, <code>phone<\/code>e <code>number<\/code>. Ricorda di considerare come gestirai i valori dei campi inviati. Se scegli di consentire questo campo, ad esempio sul tipo di campo casella di controllo, devi essere in grado di analizzare e gestire correttamente i valori inviati.<\/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=\"Moduli di gravit\u00e0: aggiungi input personalizzati ai campi e ai messaggi remoti dopo l&#039;invio\" ><\/a><\/p>\n<p>Ora, finalmente, dovresti essere in grado di vedere il tuo input personalizzato nella scheda Avanzate, se il campo \u00e8 di uno dei tipi forniti. Vedrai anche che \u00e8 stato salvato correttamente e viene caricato con il valore salvato. Ogni volta che il modulo viene inviato d&#8217;ora in poi, se questo input \u00e8 popolato, l&#8217;array del campo del modulo conterr\u00e0 la propriet\u00e0 <code>thirdPartyInput<\/code>.<\/p>\n<p>Il passaggio successivo consiste nell&#8217;aggiungere un&#8217;impostazione al modulo stesso per attivare l&#8217;invio a terzi. Questo \u00e8 facoltativo ma consigliato. Vogliamo evitare di eseguire codice non necessario o inviare qualcosa a terze parti quando non abbiamo intenzione di farlo.<\/p>\n<h2>Aggiunta di un&#8217;impostazione personalizzata alle impostazioni del modulo<\/h2>\n<p>L&#8217;aggiunta di impostazioni personalizzate alle impostazioni dei moduli \u00e8 piuttosto semplice. Dobbiamo agganciarci al filtro <code>gform_form_settings<\/code>e aggiungere il nostro HTML con tutti gli input che desideri, quindi sul filtro <code>gform_pre_form_settings_save<\/code>e assicurarci che i nostri input personalizzati siano salvati nell&#8217;oggetto modulo.<\/p>\n<p>Ecco come aggiungere un&#8217;impostazione personalizzata alle impostazioni del modulo:<\/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>Il filtro gform_form_settings prevede che le chiavi siano un&#8217;etichetta di sezione e quindi un array per ciascuna impostazione. Ne aggiungiamo solo uno con la chiave <code>submit_3rd_party<\/code>. All&#8217;input della casella di controllo usiamo il metodo di Gravity Forms <code>rgar()<\/code>per estrarre i valori di una data chiave da un array (il modulo), per assicurarci di recuperare il valore salvato del nostro campo. Modifica l&#8217;HTML in base alle tue esigenze.<\/p>\n<p>Il campo verr\u00e0 ora visualizzato nella parte inferiore delle impostazioni del modulo. Ma non salver\u00e0 ancora le tue modifiche, quindi dobbiamo risolverlo:<\/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=\"Moduli di gravit\u00e0: aggiungi input personalizzati ai campi e ai messaggi remoti dopo l&#039;invio\" ><\/a><\/p>\n<p>Questo pezzo di codice utilizza un altro dei metodi di supporto di Gravity Forms, <code>rgpost()<\/code>, per estrarre i valori inviati (da <code>$_POST<\/code>) e salvarli nell&#8217;array di moduli fornito con la chiave desiderata. Se aggiungi pi\u00f9 impostazioni, dovrai ripetere l&#8217;operazione per ciascuna impostazione.<\/p>\n<p>E questo \u00e8 tutto ci\u00f2 di cui abbiamo bisogno per aggiungere le impostazioni dei moduli personalizzati! Ogni volta che hai accesso all&#8217;oggetto modulo, puoi controllare il valore di <code>$form['submit_3rd_party']<\/code>.<\/p>\n<h2>Invia i valori inviati a terzi<\/h2>\n<p>Un buon hook da utilizzare per azioni personalizzate come l&#8217;esecuzione di una richiesta e l&#8217;invio di dati da un modulo inviato \u00e8 <code>gform_after_submission<\/code>. A questo punto tutte le convalide sono passate ed \u00e8 stato creato l&#8217;oggetto entry (reply). Con questo hook otteniamo l&#8217;accesso all&#8217;oggetto entry e all&#8217;oggetto form.<\/p>\n<p>Quello che fai in questa azione dipende da te e da come devi estrarre i dati e come esegui la richiesta di post. Per quanto riguarda questo esempio, sto facendo una semplice richiesta di post utilizzando la funzione di WordPress <code>wp_remote_post()<\/code>con un array di tutti i campi che avevano compilato il nostro input personalizzato nel corpo.<\/p>\n<p>Vedrai che prima controllo se il modulo ha attivato gli invii. Se ha il codice, scorre tutti i campi del modulo e controlla se ogni campo ha aggiunto qualcosa nel nostro input personalizzato. Se l&#8217;input non \u00e8 effettivamente vuoto, il codice controlla anche se \u00e8 stato inviato qualcosa per questo campo. Puoi rimuovere questo se-controlla se sei d&#8217;accordo a inviare valori vuoti.<\/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>La parte sull&#8217;URL e su come verranno inviati i dati \u00e8 qualcosa che dovrai ovviamente adattare da solo. Puoi anche fare qualcosa con la risposta, ad esempio inviando un&#8217;e-mail in caso di errore o qualcosa del genere. Sta a te decidere come gestire la tua funzionalit\u00e0.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un&#8217;esercitazione su Gravity Forms su come aggiungere un input personalizzato a qualsiasi tipo di campo, aggiungere impostazioni di modulo personalizzate e valori di modulo di invio remoto a una terza parte.<\/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,814,814,844,844,865,865],"tags":[1168],"class_list":["post-234017","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n-a","category-plugin-2","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/234017","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=234017"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/234017\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151327"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=234017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=234017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=234017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}