{"id":233964,"date":"2023-02-27T14:42:00","date_gmt":"2023-02-27T11:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233964"},"modified":"2022-11-11T13:27:26","modified_gmt":"2022-11-11T10:27:26","slug":"gravity-forms-laegg-till-anpassade-indata-till-faelt-och-fjaerrinlaegg-efter-inlaemning","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/gravity-forms-laegg-till-anpassade-indata-till-faelt-och-fjaerrinlaegg-efter-inlaemning\/","title":{"rendered":"Gravity Forms: L\u00e4gg till anpassade indata till f\u00e4lt och fj\u00e4rrinl\u00e4gg efter inl\u00e4mning"},"content":{"rendered":"\n<p>I den h\u00e4r sj\u00e4lvstudien f\u00f6r Gravity Forms kommer vi att l\u00e4ra oss tre saker:<\/p>\n<ul>\n<li>Hur man l\u00e4gger till en anpassad inmatning till valfri f\u00e4lttyp<\/li>\n<li>S\u00e5 h\u00e4r l\u00e4gger du till anpassade inst\u00e4llningar i ditt formul\u00e4r<\/li>\n<li>Och slutligen hur man fj\u00e4rrpostar inskickade v\u00e4rden f\u00f6r specifika f\u00e4lt efter varje formul\u00e4rinl\u00e4mning.<\/li>\n<\/ul>\n<p>Det h\u00e4r inl\u00e4gget f\u00f6ruts\u00e4tter att du vill l\u00e4gga till funktionalitet till Gravity Forms f\u00f6r att skicka en fj\u00e4rrinl\u00e4ggsbeg\u00e4ran efter varje formul\u00e4rinl\u00e4mning. Inuti fj\u00e4rrinl\u00e4gget skickar du v\u00e4rden fr\u00e5n formul\u00e4ret, som kan anpassas med ytterligare inst\u00e4llningar i formul\u00e4rredigeraren. Vanliga exempel p\u00e5 var detta skulle vara anv\u00e4ndbart \u00e4r att skicka t.ex. namn och e-post till en Mailchimps nyhetsbrevslista, eller egentligen n\u00e5gon annan tredjepartsintegration.<\/p>\n<p>S\u00e4ttet att l\u00f6sa detta i praktiken \u00e4r att f\u00f6rst l\u00e4gga till anpassade inst\u00e4llningar i varje f\u00e4lt, d\u00e4r redakt\u00f6ren kan skriva in nyckelnamn. Nyckeln och deras inskickade v\u00e4rden kommer att skickas till en tredje parts URL efter varje formul\u00e4rinskick. Vi kommer ocks\u00e5 att l\u00e4gga till en inst\u00e4llning s\u00e5 att du f\u00f6r varje formul\u00e4r kan v\u00e4lja att aktivera denna typ av tredje parts inl\u00e4mning.<\/p>\n<p>All kod nedan kan placeras i ditt tema <code>functions.php<\/code>eller plugin-kod.<\/p>\n<h2>L\u00e4gga till en anpassad inmatning till f\u00e4lt<\/h2>\n<p>Det f\u00f6rsta steget \u00e4r att l\u00e4gga till indata i f\u00e4lt i f\u00e4ltredigeraren d\u00e4r du kan skriva in nyckelnamnet f\u00f6r detta v\u00e4rde. Vi kommer endast att inkludera och skicka in v\u00e4rden d\u00e4r denna inmatning har fyllts i.<\/p>\n<h3>Att v\u00e4lja var du vill placera din input<\/h3>\n<p>Gravity Forms erbjuder krokar som vi kan anv\u00e4nda f\u00f6r att l\u00e4gga till anpassade saker i f\u00e4ltredigeraren. Krokens namn beror p\u00e5 vilken flik du vill att ditt f\u00e4lt ska visas p\u00e5.<\/p>\n<ul>\n<li>&quot;Fliken Allm\u00e4nt:<code>gform_field_standard_settings<\/code><\/li>\n<li>Fliken &quot;Utseende&quot;:<code>gform_field_appearance_settings<\/code><\/li>\n<li>Fliken &quot;Avancerat&quot;:<code>gform_field_advanced_settings<\/code><\/li>\n<\/ul>\n<p>I varje krok har du tv\u00e5 parametrar; position och blankett-ID. Varje inbyggd Gravity Forms-inst\u00e4llning har ett fast positionsnummer. Du kan j\u00e4mf\u00f6ra detta nummer f\u00f6r att best\u00e4mma exakt var du vill att din anpassade HTML eller input ska vara. Att lista alla inst\u00e4llningar och deras position skulle bli alldeles f\u00f6r l\u00e5ngt i det h\u00e4r inl\u00e4gget. Men Gravity Forms l\u00e4gger till sina inst\u00e4llningar i steg om 5. Till exempel p\u00e5 fliken Allm\u00e4nt \u00e4r &quot;F\u00e4ltetiketten&quot; p\u00e5 position 0 och &quot;Description&quot; \u00e4r p\u00e5 position 10. Om du s\u00e4tter din HTML p\u00e5 position 10 kommer den att visas efter Beskrivning. J\u00e4mf\u00f6r inte position med n\u00e5got tal som inte \u00e4r en multiplikator av 5.<\/p>\n<p>Jag l\u00e4gger till mitt anpassade f\u00e4lt p\u00e5 fliken Avancerat, vid position 50, som \u00e4r precis efter &quot;Admin Field Label&quot;-inmatning.<\/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>Det mesta av koden ovan \u00e4r sj\u00e4lvf\u00f6rklarande. Jag l\u00e4gger till HTML i samma format som Gravity Forms f\u00f6rv\u00e4ntar sig att en inst\u00e4llning finns i. Men p\u00e5 sj\u00e4lva inmatningen m\u00e5ste du tillhandah\u00e5lla en <code>onchange<\/code>Javascript-funktion. Vi s\u00e4ger helt enkelt till den att k\u00f6ra GravityForms funktion f\u00f6r att spara eventuella \u00e4ndringar som gjorts i v\u00e5r input. Egenskapen vi tillhandah\u00e5ller i <code>SetFieldProperty<\/code>, <code>thirdPartyInput<\/code>, \u00e4r viktig att komma ih\u00e5g, inuti den h\u00e4r nyckeln kommer v\u00e5r anpassade inmatning att sparas i Gravity Forms f\u00e4ltarray n\u00e4r du skickar in.<\/p>\n<h3>L\u00e4gga till ett verktygstips (valfritt)<\/h3>\n<p>Du kan g\u00f6ra en annan valfri sak med din input; l\u00e4gga till ett verktygstips. Om du vill ha detta, l\u00e4gg till detta funktionsanrop i koden du just lade till och ange en (unik) nyckel som str\u00e4ng:<\/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>Och l\u00e4gg sedan till en annan funktion som hakar p\u00e5 filtret <code>gform_tooltips<\/code>och l\u00e4gg till ditt verktygstipsinneh\u00e5ll till motsvarande nyckel, s\u00e5 h\u00e4r:<\/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>Att l\u00e4gga till ett verktygstips \u00e4r helt valfritt, men ett bra s\u00e4tt att f\u00f6rklara f\u00f6r webbplats\u00e4gare vad den h\u00e4r inmatningen g\u00f6r. \u00c4ndra inneh\u00e5llet till det som passar din funktionalitet.<\/p>\n<h3>Definiera vilka f\u00e4lttyper som ska l\u00e4ggas till din anpassade inmatning<\/h3>\n<p>Du kanske m\u00e4rker att ditt f\u00e4lt inte visas p\u00e5 n\u00e5gon Avancerat flik. Detta beror p\u00e5 att vi m\u00e5ste tala om f\u00f6r Gravity Forms vilka f\u00e4lttyper vi vill att denna indata ska visas i. Som standard visas den inte i n\u00e5gon.<\/p>\n<p>S\u00e4ttet vi g\u00f6r detta p\u00e5 \u00e4r faktiskt med Javascript. GravityForms har Javascript som automatiskt d\u00f6ljer alla inst\u00e4llningar och sedan v\u00e4ljer att visa specifika baserat p\u00e5 f\u00e4lttyp. S\u00e5 v\u00e5rt f\u00e4lt \u00e4r d\u00e4r, men Gravity Forms har helt enkelt g\u00f6mt det.<\/p>\n<p>Vi hakar p\u00e5 <code>gform_editor_js<\/code>och vi beh\u00f6ver g\u00f6ra tv\u00e5 saker. F\u00f6rst best\u00e4mmer vi vilka f\u00e4lttyper ing\u00e5ngen ska visas i. Och f\u00f6r det andra ser vi till att ing\u00e5ngen fylls i med sitt v\u00e4rde vid belastning.<\/p>\n<p>Jag l\u00e4gger till indata till f\u00e4lttyper <code>text<\/code>, <code>textarea<\/code>, <code>email<\/code>, <code>phone<\/code>och <code>number<\/code>. Kom ih\u00e5g att \u00f6verv\u00e4ga hur du ska hantera v\u00e4rdena i de inskickade f\u00e4lten. Om du v\u00e4ljer att till\u00e5ta det h\u00e4r f\u00e4ltet till exempel p\u00e5 f\u00e4lttyp f\u00f6r kryssruta, m\u00e5ste du kunna analysera och hantera de inskickade v\u00e4rdena korrekt.<\/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: L\u00e4gg till anpassade indata till f\u00e4lt och fj\u00e4rrinl\u00e4gg efter inl\u00e4mning\" ><\/a><\/p>\n<p>Nu, \u00e4ntligen, b\u00f6r du kunna se din anpassade inmatning p\u00e5 fliken Avancerat, om f\u00e4ltet \u00e4r av n\u00e5gon av de angivna typerna. Du kommer ocks\u00e5 att se att den har sparats framg\u00e5ngsrikt och laddas med sitt sparade v\u00e4rde. N\u00e4rhelst formul\u00e4ret skickas fr\u00e5n och med nu, om denna indata \u00e4r ifylld, kommer formul\u00e4rf\u00e4ltets array att inneh\u00e5lla egenskapen <code>thirdPartyInput<\/code>.<\/p>\n<p>N\u00e4sta steg \u00e4r att l\u00e4gga till en inst\u00e4llning p\u00e5 sj\u00e4lva formul\u00e4ret f\u00f6r att aktivera inl\u00e4mning till tredje part. Detta \u00e4r valfritt men rekommenderas. Vi vill undvika att k\u00f6ra on\u00f6dig kod eller skicka in n\u00e5got till tredje part n\u00e4r vi inte har f\u00f6r avsikt att g\u00f6ra det.<\/p>\n<h2>L\u00e4gga till en anpassad inst\u00e4llning till formul\u00e4rinst\u00e4llningar<\/h2>\n<p>Att l\u00e4gga till anpassade inst\u00e4llningar till formul\u00e4rinst\u00e4llningar \u00e4r ganska enkelt. Vi m\u00e5ste ansluta till filtret <code>gform_form_settings<\/code>och l\u00e4gga till v\u00e5r HTML med alla inmatningar du vill, och sedan p\u00e5 filtret <code>gform_pre_form_settings_save<\/code>och se till att v\u00e5ra anpassade indata sparas p\u00e5 formul\u00e4robjektet.<\/p>\n<p>S\u00e5 h\u00e4r l\u00e4gger du till en anpassad inst\u00e4llning till formul\u00e4rinst\u00e4llningar:<\/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>Filtret gform_form_settings f\u00f6rv\u00e4ntar sig att nycklar \u00e4r en sektionsetikett och sedan en array f\u00f6r varje inst\u00e4llning. Vi l\u00e4gger bara till en med nyckeln <code>submit_3rd_party<\/code>. Vid sj\u00e4lva inmatningen av kryssrutan anv\u00e4nder vi Gravity Forms metod <code>rgar()<\/code>f\u00f6r att extrahera v\u00e4rden f\u00f6r given nyckel fr\u00e5n en array (formul\u00e4ret), f\u00f6r att se till att vi h\u00e4mtar det sparade v\u00e4rdet f\u00f6r v\u00e5rt f\u00e4lt. \u00c4ndra HTML-koden s\u00e5 att den passar dina behov.<\/p>\n<p>F\u00e4ltet kommer nu att visas l\u00e4ngst ned i formul\u00e4rinst\u00e4llningarna. Men det kommer inte att spara dina \u00e4ndringar \u00e4n, s\u00e5 vi m\u00e5ste fixa det:<\/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: L\u00e4gg till anpassade indata till f\u00e4lt och fj\u00e4rrinl\u00e4gg efter inl\u00e4mning\" ><\/a><\/p>\n<p>Den h\u00e4r kodbiten anv\u00e4nder ytterligare en av Gravity Forms hj\u00e4lpmetoder, <code>rgpost()<\/code>, f\u00f6r att extrahera inl\u00e4mnade v\u00e4rden (fr\u00e5n <code>$_POST<\/code>) och sparar dem i den medf\u00f6ljande formarrayen med v\u00e5r \u00f6nskade nyckel. Om du l\u00e4gger till fler inst\u00e4llningar m\u00e5ste du upprepa detta f\u00f6r varje inst\u00e4llning.<\/p>\n<p>Och det \u00e4r allt vi beh\u00f6ver f\u00f6r att l\u00e4gga till anpassade formul\u00e4rinst\u00e4llningar! N\u00e4r du har tillg\u00e5ng till formul\u00e4robjektet kan du kontrollera v\u00e4rdet p\u00e5 <code>$form['submit_3rd_party']<\/code>.<\/p>\n<h2>Skicka inskickade v\u00e4rden till tredje part<\/h2>\n<p>En bra krok att anv\u00e4nda f\u00f6r anpassade \u00e5tg\u00e4rder som att utf\u00f6ra en f\u00f6rfr\u00e5gan och skicka data fr\u00e5n ett skickat formul\u00e4r \u00e4r <code>gform_after_submission<\/code>. Vid denna tidpunkt har all validering passerat och ing\u00e5ngsobjektet (svar) har skapats. Med denna krok f\u00e5r vi tillg\u00e5ng till inmatningsobjektet och formul\u00e4robjektet.<\/p>\n<p>Vad du g\u00f6r i den h\u00e4r \u00e5tg\u00e4rden \u00e4r upp till dig och hur du beh\u00f6ver extrahera data och hur du utf\u00f6r efterfr\u00e5gan. N\u00e4r det g\u00e4ller det h\u00e4r exemplet g\u00f6r jag en enkel inl\u00e4ggsbeg\u00e4ran med WordPress-funktionen <code>wp_remote_post()<\/code>med en rad alla f\u00e4lt som hade fyllt i v\u00e5r anpassade inmatning i kroppen.<\/p>\n<p>Du kommer att se att jag f\u00f6rst kontrollerar om formul\u00e4ret har aktiverat inl\u00e4mningar. Om den har koden g\u00e5r den igenom alla formul\u00e4rf\u00e4lt och kontrollerar om varje f\u00e4lt har lagt till n\u00e5got i v\u00e5r anpassade inmatning. Om inmatningen verkligen inte \u00e4r tom, kontrollerar koden ocks\u00e5 om n\u00e5got har skickats f\u00f6r detta f\u00e4lt. Du kan ta bort denna om-kontroll om du \u00e4r okej att skicka in tomma v\u00e4rden.<\/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>Delen om URL:en och hur datan kommer att skickas \u00e4r n\u00e5got du sj\u00e4lvklart beh\u00f6ver justera sj\u00e4lv. Du kan ocks\u00e5 valfritt g\u00f6ra n\u00e5got med svaret, till exempel skicka ett e-postmeddelande om det misslyckades eller n\u00e5got. Det \u00e4r helt upp till dig hur du vill hantera din funktionalitet.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En sj\u00e4lvstudiekurs f\u00f6r Gravity Forms om hur man l\u00e4gger till en anpassad inmatning till valfri f\u00e4lttyp, l\u00e4gger till anpassade formul\u00e4rinst\u00e4llningar och fj\u00e4rrs\u00e4ndning av formul\u00e4rv\u00e4rden till en tredje part.<\/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":[848,1110,818,818,848,868,868],"tags":[1173],"class_list":["post-233964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-n-a","category-plugins-3","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233964"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233964\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/151327"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}