{"id":234281,"date":"2023-02-27T15:00:00","date_gmt":"2023-02-27T12:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234281"},"modified":"2022-11-12T03:33:09","modified_gmt":"2022-11-12T00:33:09","slug":"gravity-forms-ajouter-des-entrees-personnalisees-aux-champs-et-a-la-publication-a-distance-apres-la-soumission","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/gravity-forms-ajouter-des-entrees-personnalisees-aux-champs-et-a-la-publication-a-distance-apres-la-soumission\/","title":{"rendered":"Gravity Forms\u00a0: ajouter des entr\u00e9es personnalis\u00e9es aux champs et \u00e0 la publication \u00e0 distance apr\u00e8s la soumission"},"content":{"rendered":"\n<p>Dans ce tutoriel Gravity Forms, nous apprendrons trois choses :<\/p>\n<ul>\n<li>Comment ajouter une entr\u00e9e personnalis\u00e9e \u00e0 n&rsquo;importe quel type de champ de votre choix<\/li>\n<li>Comment ajouter des param\u00e8tres personnalis\u00e9s \u00e0 votre formulaire<\/li>\n<li>Et enfin, comment publier \u00e0 distance les valeurs soumises pour des champs sp\u00e9cifiques apr\u00e8s chaque soumission de formulaire.<\/li>\n<\/ul>\n<p>Ce message suppose que vous souhaitez ajouter des fonctionnalit\u00e9s \u00e0 Gravity Forms pour envoyer une demande de publication \u00e0 distance apr\u00e8s chaque soumission de formulaire. Dans la publication distante, vous enverrez des valeurs \u00e0 partir du formulaire, qui sont personnalisables par des param\u00e8tres suppl\u00e9mentaires dans l&rsquo;\u00e9diteur de formulaire. Des exemples courants de cas o\u00f9 cela serait utile sont la soumission, par exemple, d&rsquo;un nom et d&rsquo;un e-mail \u00e0 une liste de newsletter Mailchimp, ou \u00e0 toute autre int\u00e9gration tierce.<\/p>\n<p>La fa\u00e7on de r\u00e9soudre ce probl\u00e8me en pratique consiste d&rsquo;abord \u00e0 ajouter des param\u00e8tres personnalis\u00e9s \u00e0 chaque champ, o\u00f9 l&rsquo;\u00e9diteur peut saisir des noms de cl\u00e9. La cl\u00e9 et leurs valeurs soumises seront envoy\u00e9es \u00e0 une URL tierce apr\u00e8s chaque soumission de formulaire. Nous ajouterons \u00e9galement un param\u00e8tre afin que vous puissiez choisir pour chaque formulaire d&rsquo;activer ce type de soumission de tiers.<\/p>\n<p>Tout le code ci-dessous peut \u00eatre plac\u00e9 dans le code de votre th\u00e8me <code>functions.php<\/code>ou plugin.<\/p>\n<h2>Ajouter une entr\u00e9e personnalis\u00e9e aux champs<\/h2>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 ajouter l&rsquo;entr\u00e9e aux champs dans l&rsquo;\u00e9diteur de champs o\u00f9 vous pouvez saisir le nom de la cl\u00e9 pour cette valeur. Nous inclurons et soumettrons uniquement les valeurs o\u00f9 cette entr\u00e9e a \u00e9t\u00e9 remplie.<\/p>\n<h3>Choisir o\u00f9 placer votre entr\u00e9e<\/h3>\n<p>Gravity Forms propose des crochets que nous pouvons utiliser pour ajouter des \u00e9l\u00e9ments personnalis\u00e9s dans l&rsquo;\u00e9diteur de champs. Le nom du hook d\u00e9pend de l&rsquo;onglet dans lequel vous souhaitez que votre champ apparaisse.<\/p>\n<ul>\n<li>Onglet &quot;G\u00e9n\u00e9ral&quot;\u00a0:<code>gform_field_standard_settings<\/code><\/li>\n<li>Onglet &quot;Apparence&quot;\u00a0:<code>gform_field_appearance_settings<\/code><\/li>\n<li>&quot;Onglet Avanc\u00e9:<code>gform_field_advanced_settings<\/code><\/li>\n<\/ul>\n<p>Dans chaque crochet, vous aurez deux param\u00e8tres\u00a0; ID de position et de formulaire. Chaque param\u00e8tre Gravity Forms int\u00e9gr\u00e9 a un num\u00e9ro de position fixe. Vous pouvez comparer ce nombre pour d\u00e9cider pr\u00e9cis\u00e9ment o\u00f9 vous voulez que votre HTML personnalis\u00e9 ou votre entr\u00e9e soit. Lister tous les param\u00e8tres et leur position serait beaucoup trop long dans ce post. Mais Gravity Forms ajoute ses param\u00e8tres par incr\u00e9ments de 5. Par exemple, dans l&rsquo;onglet G\u00e9n\u00e9ral, le &quot;Libell\u00e9 du champ&quot; est \u00e0 la position 0 et la &quot;Description&quot; est \u00e0 la position 10. Mettre votre code HTML \u00e0 la position 10 le fera appara\u00eetre apr\u00e8s Description. Ne comparez pas la position \u00e0 un nombre qui n&rsquo;est pas un multiplicateur de 5.<\/p>\n<p>J&rsquo;ajoute mon champ personnalis\u00e9 dans l&rsquo;onglet Avanc\u00e9, \u00e0 la position 50, qui se trouve juste apr\u00e8s l&rsquo;entr\u00e9e &quot;Admin Field Label&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 plupart du code ci-dessus est explicite. J&rsquo;ajoute du HTML dans le m\u00eame format que celui auquel Gravity Forms s&rsquo;attendrait \u00e0 ce qu&rsquo;un param\u00e8tre soit pr\u00e9sent. Cependant, sur l&rsquo;entr\u00e9e elle-m\u00eame, vous devez fournir une <code>onchange<\/code>fonction Javascript. Nous lui disons simplement d&rsquo;ex\u00e9cuter la fonction de GravityForms pour enregistrer toutes les modifications apport\u00e9es \u00e0 notre entr\u00e9e. La propri\u00e9t\u00e9 que nous fournissons dans <code>SetFieldProperty<\/code>, <code>thirdPartyInput<\/code>, est importante \u00e0 retenir, \u00e0 l&rsquo;int\u00e9rieur de cette cl\u00e9 est l&rsquo;endroit o\u00f9 notre entr\u00e9e personnalis\u00e9e sera enregistr\u00e9e dans le tableau de champs de Gravity Forms lors de la soumission.<\/p>\n<h3>Ajout d&rsquo;une info-bulle (facultatif)<\/h3>\n<p>Vous pouvez faire une autre chose facultative avec votre entr\u00e9e ; ajouter une info-bulle. Si vous le souhaitez, ajoutez cet appel de fonction dans le code que vous venez d&rsquo;ajouter et fournissez une cl\u00e9 (unique) en tant que cha\u00eene\u00a0:<\/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>Et puis ajoutez une autre fonction qui s&rsquo;accroche au filter <code>gform_tooltips<\/code>, et ajoutez le contenu de votre info-bulle \u00e0 la cl\u00e9 correspondante, comme ceci :<\/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&rsquo;ajout d&rsquo;une info-bulle est compl\u00e8tement facultatif, mais c&rsquo;est une bonne fa\u00e7on d&rsquo;expliquer aux propri\u00e9taires de sites ce que fait cette entr\u00e9e. Modifiez le contenu en fonction de votre fonctionnalit\u00e9.<\/p>\n<h3>D\u00e9finir les types de champ pour ajouter votre entr\u00e9e personnalis\u00e9e<\/h3>\n<p>Vous remarquerez peut-\u00eatre que votre champ n&rsquo;appara\u00eet dans aucun onglet Avanc\u00e9. En effet, nous devons indiquer \u00e0 Gravity Forms dans quels types de champs nous voulons que cette entr\u00e9e apparaisse. Par d\u00e9faut, elle n&rsquo;appara\u00eetra dans aucun.<\/p>\n<p>La fa\u00e7on dont nous le faisons est en fait avec Javascript. GravityForms a Javascript qui masque automatiquement tous les param\u00e8tres, puis choisit d&rsquo;afficher ceux sp\u00e9cifiques en fonction du type de champ. Notre champ est donc l\u00e0, mais Gravity Forms l&rsquo;a simplement cach\u00e9.<\/p>\n<p>Nous nous accrochons <code>gform_editor_js<\/code>et nous devons faire deux choses. Premi\u00e8rement, nous d\u00e9cidons dans quels types de champs l&rsquo;entr\u00e9e doit appara\u00eetre. Et deuxi\u00e8mement, nous nous assurons que l&rsquo;entr\u00e9e est remplie avec sa valeur au chargement.<\/p>\n<p>J&rsquo;ajoute l&rsquo;entr\u00e9e aux types de champs <code>text<\/code>, <code>textarea<\/code>, <code>email<\/code>, <code>phone<\/code>et <code>number<\/code>. N&rsquo;oubliez pas de consid\u00e9rer comment vous allez g\u00e9rer les valeurs des champs soumis. Si vous choisissez d&rsquo;autoriser ce champ, par exemple sur le type de champ de case \u00e0 cocher, vous devez \u00eatre en mesure d&rsquo;analyser et de g\u00e9rer correctement les valeurs soumises.<\/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=\"Gravity Forms\u00a0: ajouter des entr\u00e9es personnalis\u00e9es aux champs et \u00e0 la publication \u00e0 distance apr\u00e8s la soumission\" ><\/a><\/p>\n<p>Maintenant, enfin, vous devriez pouvoir voir votre entr\u00e9e personnalis\u00e9e dans l&rsquo;onglet Avanc\u00e9, si le champ est de l&rsquo;un des types fournis. Vous verrez \u00e9galement qu&rsquo;il a \u00e9t\u00e9 enregistr\u00e9 avec succ\u00e8s et qu&rsquo;il est charg\u00e9 avec sa valeur enregistr\u00e9e. Chaque fois que le formulaire est soumis \u00e0 partir de maintenant, si cette entr\u00e9e est renseign\u00e9e, le tableau du champ du formulaire contiendra la propri\u00e9t\u00e9 <code>thirdPartyInput<\/code>.<\/p>\n<p>La prochaine \u00e9tape consiste \u00e0 ajouter un param\u00e8tre sur le formulaire lui-m\u00eame pour activer la soumission \u00e0 un tiers. Ceci est facultatif mais recommand\u00e9. Nous voulons \u00e9viter d&rsquo;ex\u00e9cuter du code inutile ou de soumettre quelque chose \u00e0 un tiers lorsque nous n&rsquo;en avons pas l&rsquo;intention.<\/p>\n<h2>Ajout d&rsquo;un param\u00e8tre personnalis\u00e9 aux param\u00e8tres de formulaire<\/h2>\n<p>L&rsquo;ajout de param\u00e8tres personnalis\u00e9s aux param\u00e8tres de formulaire est assez simple. Nous devons nous accrocher au filtre <code>gform_form_settings<\/code>et ajouter notre HTML avec toutes les entr\u00e9es que vous souhaitez, puis sur le filtre <code>gform_pre_form_settings_save<\/code>et nous assurer que nos entr\u00e9es personnalis\u00e9es sont enregistr\u00e9es sur l&rsquo;objet de formulaire.<\/p>\n<p>Voici comment ajouter un param\u00e8tre personnalis\u00e9 aux param\u00e8tres de formulaire\u00a0:<\/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>Le filtre gform_form_settings s&rsquo;attend \u00e0 ce que les cl\u00e9s soient une \u00e9tiquette de section, puis un tableau pour chaque param\u00e8tre. Nous en ajoutons un seul avec la cl\u00e9 <code>submit_3rd_party<\/code>. \u00c0 l&rsquo;entr\u00e9e de la case \u00e0 cocher elle-m\u00eame, nous utilisons la m\u00e9thode de Gravity Forms <code>rgar()<\/code>pour extraire les valeurs d&rsquo;une cl\u00e9 donn\u00e9e d&rsquo;un tableau (le formulaire), pour nous assurer que nous r\u00e9cup\u00e9rons la valeur enregistr\u00e9e de notre champ. Modifiez le HTML pour l&rsquo;adapter \u00e0 vos besoins.<\/p>\n<p>Le champ appara\u00eetra maintenant au bas des param\u00e8tres du formulaire. Mais cela n&rsquo;enregistrera pas encore vos modifications, nous devons donc r\u00e9soudre ce probl\u00e8me\u00a0:<\/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=\"Gravity Forms\u00a0: ajouter des entr\u00e9es personnalis\u00e9es aux champs et \u00e0 la publication \u00e0 distance apr\u00e8s la soumission\" ><\/a><\/p>\n<p>Ce morceau de code utilise une autre des m\u00e9thodes d&rsquo;assistance de Gravity Forms, <code>rgpost()<\/code>, pour extraire les valeurs soumises (\u00e0 partir de <code>$_POST<\/code>) et les enregistre dans le tableau de formulaire fourni avec la cl\u00e9 souhait\u00e9e. Si vous ajoutez d&rsquo;autres param\u00e8tres, vous devrez r\u00e9p\u00e9ter cette op\u00e9ration pour chaque param\u00e8tre.<\/p>\n<p>Et c&rsquo;est tout ce dont nous avons besoin pour ajouter des param\u00e8tres de formulaire personnalis\u00e9s\u00a0! Chaque fois que vous avez acc\u00e8s \u00e0 l&rsquo;objet de formulaire, vous pouvez v\u00e9rifier la valeur de <code>$form['submit_3rd_party']<\/code>.<\/p>\n<h2>Envoyer les valeurs soumises \u00e0 un tiers<\/h2>\n<p>Un bon crochet \u00e0 utiliser pour des actions personnalis\u00e9es telles que l&rsquo;ex\u00e9cution d&rsquo;une demande et l&rsquo;envoi de donn\u00e9es \u00e0 partir d&rsquo;un formulaire soumis est <code>gform_after_submission<\/code>. \u00c0 ce stade, toutes les validations ont r\u00e9ussi et l&rsquo;objet d&rsquo;entr\u00e9e (r\u00e9ponse) a \u00e9t\u00e9 cr\u00e9\u00e9. Avec ce crochet, nous avons acc\u00e8s \u00e0 l&rsquo;objet entry et \u00e0 l&rsquo;objet form.<\/p>\n<p>Ce que vous faites dans cette action d\u00e9pend de vous, de la mani\u00e8re dont vous devez extraire les donn\u00e9es et de la mani\u00e8re dont vous effectuez la demande de publication. En ce qui concerne cet exemple, je fais une simple demande de publication en utilisant la fonction WordPress <code>wp_remote_post()<\/code>avec un tableau de tous les champs qui avaient rempli notre entr\u00e9e personnalis\u00e9e dans le corps.<\/p>\n<p>Vous verrez que je v\u00e9rifie d&rsquo;abord si le formulaire a activ\u00e9 les soumissions. S&rsquo;il a le code, il parcourt tous les champs du formulaire et v\u00e9rifie si chaque champ a ajout\u00e9 quelque chose dans notre entr\u00e9e personnalis\u00e9e. Si l&rsquo;entr\u00e9e n&rsquo;est effectivement pas vide, le code v\u00e9rifie \u00e9galement si quelque chose a \u00e9t\u00e9 soumis pour ce champ. Vous pouvez supprimer cette v\u00e9rification si vous \u00eates d&rsquo;accord pour soumettre des valeurs vides.<\/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 partie concernant l&rsquo;URL et la mani\u00e8re dont les donn\u00e9es seront envoy\u00e9es est quelque chose que vous devrez \u00e9videmment ajuster vous-m\u00eame. Vous pouvez \u00e9galement \u00e9ventuellement faire quelque chose avec la r\u00e9ponse, par exemple envoyer un e-mail en cas d&rsquo;\u00e9chec ou quelque chose du genre. C&rsquo;est \u00e0 vous de d\u00e9cider comment vous voulez g\u00e9rer vos fonctionnalit\u00e9s.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <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 tutoriel Gravity Forms sur la fa\u00e7on d&rsquo;ajouter une entr\u00e9e personnalis\u00e9e \u00e0 n&rsquo;importe quel type de champ, d&rsquo;ajouter des param\u00e8tres de formulaire personnalis\u00e9s et de soumettre \u00e0 distance des valeurs de formulaire \u00e0 un tiers.<\/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,811,811,841,841,862,862],"tags":[1167],"class_list":["post-234281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n-a","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234281"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234281\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/151327"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}