{"id":233961,"date":"2023-02-27T15:00:00","date_gmt":"2023-02-27T12:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233961"},"modified":"2022-11-11T13:25:49","modified_gmt":"2022-11-11T10:25:49","slug":"formularios-de-gravedad-agregue-entradas-personalizadas-a-los-campos-y-publicacion-remota-despues-del-envio","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/formularios-de-gravedad-agregue-entradas-personalizadas-a-los-campos-y-publicacion-remota-despues-del-envio\/","title":{"rendered":"Formularios de gravedad: agregue entradas personalizadas a los campos y publicaci\u00f3n remota despu\u00e9s del env\u00edo"},"content":{"rendered":"\n<p>En este tutorial de Gravity Forms aprenderemos tres cosas:<\/p>\n<ul>\n<li>C\u00f3mo agregar una entrada personalizada a cualquier tipo de campo de su elecci\u00f3n<\/li>\n<li>C\u00f3mo agregar configuraciones personalizadas a su formulario<\/li>\n<li>Y finalmente, c\u00f3mo publicar de forma remota los valores enviados para campos espec\u00edficos despu\u00e9s de cada env\u00edo de formulario.<\/li>\n<\/ul>\n<p>Esta publicaci\u00f3n asume que desea agregar funcionalidad a Gravity Forms para enviar una solicitud de publicaci\u00f3n remota despu\u00e9s de cada env\u00edo de formulario. Dentro de la publicaci\u00f3n remota, enviar\u00e1 valores desde el formulario, que se pueden personalizar mediante configuraciones adicionales en el editor de formularios. Los ejemplos comunes de d\u00f3nde ser\u00eda \u00fatil esto son enviar, por ejemplo, el nombre y el correo electr\u00f3nico a una lista de boletines de Mailchimp, o realmente cualquier otra integraci\u00f3n de terceros.<\/p>\n<p>La forma de resolver esto en la pr\u00e1ctica es primero agregar configuraciones personalizadas a cada campo, donde el editor puede escribir nombres clave. La clave y sus valores enviados se enviar\u00e1n a una URL de terceros despu\u00e9s de cada env\u00edo de formulario. Tambi\u00e9n agregaremos una configuraci\u00f3n para que pueda elegir para cada formulario activar este tipo de env\u00edo de terceros.<\/p>\n<p>Todo el c\u00f3digo a continuaci\u00f3n se puede colocar en el c\u00f3digo de su tema <code>functions.php<\/code>o complemento.<\/p>\n<h2>Agregar una entrada personalizada a los campos<\/h2>\n<p>El primer paso es agregar la entrada a los campos en el editor de campos donde puede escribir el nombre clave para este valor. Solo incluiremos y enviaremos valores donde se haya completado esta entrada.<\/p>\n<h3>Elegir d\u00f3nde colocar su entrada<\/h3>\n<p>Gravity Forms ofrece ganchos que podemos usar para agregar cosas personalizadas en el editor de campo. El nombre del enlace depende de la pesta\u00f1a en la que desea que aparezca su campo.<\/p>\n<ul>\n<li>&quot;Pesta\u00f1a General:<code>gform_field_standard_settings<\/code><\/li>\n<li>Pesta\u00f1a &quot;Apariencia&quot;:<code>gform_field_appearance_settings<\/code><\/li>\n<li>&quot;Leng\u00fceta avanzada:<code>gform_field_advanced_settings<\/code><\/li>\n<\/ul>\n<p>En cada gancho tendr\u00e1s dos par\u00e1metros; posici\u00f3n y formulario de identificaci\u00f3n. Cada ajuste integrado de Gravity Forms tiene un n\u00famero de posici\u00f3n fijo. Puede comparar este n\u00famero para decidir con precisi\u00f3n d\u00f3nde desea que est\u00e9 su entrada o HTML personalizado. Enumerar todas las configuraciones y su posici\u00f3n ser\u00eda demasiado largo en esta publicaci\u00f3n. Pero Gravity Forms agrega sus configuraciones en incrementos de 5. Por ejemplo, en la pesta\u00f1a General, la &quot;Etiqueta de campo&quot; est\u00e1 en la posici\u00f3n 0 y la &quot;Descripci\u00f3n&quot; est\u00e1 en la posici\u00f3n 10. Poner su HTML en la posici\u00f3n 10 har\u00e1 que aparezca despu\u00e9s de Descripci\u00f3n. No compares la posici\u00f3n con ning\u00fan n\u00famero que no sea un multiplicador de 5.<\/p>\n<p>Estoy agregando mi campo personalizado en la pesta\u00f1a Avanzado, en la posici\u00f3n 50, que est\u00e1 justo despu\u00e9s de la entrada &quot;Etiqueta de campo de administrador&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 mayor parte del c\u00f3digo anterior se explica por s\u00ed mismo. Estoy agregando HTML en el mismo formato en el que Gravity Forms esperar\u00eda que haya una configuraci\u00f3n. Sin embargo, en la entrada en s\u00ed, debe proporcionar una <code>onchange<\/code>funci\u00f3n Javascript. Simplemente le decimos que ejecute la funci\u00f3n de GravityForms para guardar los cambios realizados en nuestra entrada. Es importante recordar la propiedad que proporcionamos en <code>SetFieldProperty<\/code>, <code>thirdPartyInput<\/code>, dentro de esta clave es donde nuestra entrada personalizada se guardar\u00e1 en la matriz de campos de Gravity Forms al enviar.<\/p>\n<h3>Adici\u00f3n de informaci\u00f3n sobre herramientas (opcional)<\/h3>\n<p>Puede hacer otra cosa opcional con su entrada; agregar informaci\u00f3n sobre herramientas. Si desea esto, agregue esta llamada de funci\u00f3n dentro del c\u00f3digo que acaba de agregar y proporcione una clave (\u00fanica) como cadena:<\/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>Y luego agregue otra funci\u00f3n que se conecte al filtro <code>gform_tooltips<\/code>y agregue el contenido de la informaci\u00f3n sobre herramientas a la tecla correspondiente, as\u00ed:<\/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>Agregar una informaci\u00f3n sobre herramientas es completamente opcional, pero es una buena manera de explicar a los propietarios del sitio lo que hace esta entrada. Modifique el contenido a lo que se ajuste a su funcionalidad.<\/p>\n<h3>Definici\u00f3n de qu\u00e9 tipos de campo agregar su entrada personalizada<\/h3>\n<p>Es posible que observe que su campo no aparece en ninguna pesta\u00f1a Avanzado. Esto se debe a que necesitamos decirle a Gravity Forms en qu\u00e9 tipos de campo queremos que aparezca esta entrada. Por defecto, no aparecer\u00e1 en ninguno.<\/p>\n<p>La forma en que hacemos esto es en realidad con Javascript. GravityForms tiene Javascript que oculta autom\u00e1ticamente todas las configuraciones y luego elige mostrar las espec\u00edficas seg\u00fan el tipo de campo. As\u00ed que nuestro campo est\u00e1 ah\u00ed, pero Gravity Forms simplemente lo ha escondido.<\/p>\n<p>Nos enganchamos <code>gform_editor_js<\/code>y necesitamos hacer dos cosas. Primero, decidimos en qu\u00e9 tipos de campo debe aparecer la entrada. Y segundo, nos aseguramos de que la entrada se complete con su valor al cargar.<\/p>\n<p>Estoy agregando la entrada a los tipos de campo <code>text<\/code>, <code>textarea<\/code>, <code>email<\/code>, <code>phone<\/code>y <code>number<\/code>. Recuerde considerar c\u00f3mo va a manejar los valores de los campos enviados. Si elige permitir este campo, por ejemplo, en el tipo de campo de casilla de verificaci\u00f3n, entonces debe poder analizar y manejar los valores enviados correctamente.<\/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=\"Formularios de gravedad: agregue entradas personalizadas a los campos y publicaci\u00f3n remota despu\u00e9s del env\u00edo\" ><\/a><\/p>\n<p>Ahora, finalmente, deber\u00eda poder ver su entrada personalizada en la pesta\u00f1a Avanzado, si el campo es de cualquiera de los tipos provistos. Tambi\u00e9n ver\u00e1 que se guard\u00f3 correctamente y se carga con su valor guardado. Cada vez que se env\u00ede el formulario a partir de ahora, si se completa esta entrada, la matriz del campo del formulario contendr\u00e1 la propiedad <code>thirdPartyInput<\/code>.<\/p>\n<p>El siguiente paso es agregar una configuraci\u00f3n en el formulario para activar el env\u00edo a terceros. Esto es opcional pero recomendado. Queremos evitar ejecutar c\u00f3digo innecesario o enviar algo a un tercero cuando no es nuestra intenci\u00f3n.<\/p>\n<h2>Agregar una configuraci\u00f3n personalizada a la configuraci\u00f3n del formulario<\/h2>\n<p>Agregar configuraciones personalizadas a la configuraci\u00f3n del formulario es bastante simple. Necesitamos conectarnos al filtro <code>gform_form_settings<\/code>y agregar nuestro HTML con las entradas que desee, y luego al filtro <code>gform_pre_form_settings_save<\/code>y asegurarnos de que nuestras entradas personalizadas se guarden en el objeto de formulario.<\/p>\n<p>As\u00ed es como agregar\u00eda una configuraci\u00f3n personalizada a la configuraci\u00f3n del formulario:<\/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>El filtro gform_form_settings espera que las claves sean una etiqueta de secci\u00f3n y luego una matriz para cada configuraci\u00f3n. A\u00f1adimos solo uno con la tecla <code>submit_3rd_party<\/code>. En la entrada de la casilla de verificaci\u00f3n, usamos el m\u00e9todo de Gravity Forms <code>rgar()<\/code>para extraer los valores de la clave dada de una matriz (el formulario), para asegurarnos de obtener el valor guardado de nuestro campo. Modifique el HTML para que se ajuste a sus necesidades.<\/p>\n<p>El campo ahora aparecer\u00e1 en la parte inferior de la configuraci\u00f3n del formulario. Pero a\u00fan no guardar\u00e1 los cambios, por lo que debemos corregirlo:<\/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=\"Formularios de gravedad: agregue entradas personalizadas a los campos y publicaci\u00f3n remota despu\u00e9s del env\u00edo\" ><\/a><\/p>\n<p>Este fragmento de c\u00f3digo utiliza otro de los m\u00e9todos auxiliares de Gravity Forms, <code>rgpost()<\/code>, para extraer los valores enviados (de <code>$_POST<\/code>) y los guarda en la matriz de formulario proporcionada con nuestra clave deseada. Si agrega m\u00e1s configuraciones, deber\u00e1 repetir esto para cada configuraci\u00f3n.<\/p>\n<p>\u00a1Y eso es todo lo que necesitamos para agregar configuraciones de formulario personalizadas! Siempre que tenga acceso al objeto de formulario, puede verificar el valor de <code>$form['submit_3rd_party']<\/code>.<\/p>\n<h2>Enviar valores enviados a terceros<\/h2>\n<p>Un buen gancho para usar en acciones personalizadas, como realizar una solicitud y enviar datos desde un formulario enviado, es <code>gform_after_submission<\/code>. En este punto, toda la validaci\u00f3n ha pasado y se ha creado el objeto de entrada (respuesta). Con este gancho obtenemos acceso al objeto de entrada y al objeto de formulario.<\/p>\n<p>Lo que haga en esta acci\u00f3n depende de usted y de c\u00f3mo necesita extraer los datos y c\u00f3mo realiza la solicitud posterior. En cuanto a este ejemplo, estoy haciendo una solicitud de publicaci\u00f3n simple usando la funci\u00f3n de WordPress <code>wp_remote_post()<\/code>con una matriz de todos los campos que completaron nuestra entrada personalizada en el cuerpo.<\/p>\n<p>Ver\u00e1 que primero verifico si el formulario tiene env\u00edos activados. Si tiene, el c\u00f3digo recorre todos los campos del formulario y verifica si cada campo ha agregado algo en nuestra entrada personalizada. Si la entrada no est\u00e1 vac\u00eda, el c\u00f3digo tambi\u00e9n verifica si se envi\u00f3 algo para este campo. Puede eliminar esta verificaci\u00f3n si est\u00e1 de acuerdo con enviar valores vac\u00edos.<\/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 sobre la URL y c\u00f3mo se enviar\u00e1n los datos es algo que obviamente deber\u00e1 ajustar usted mismo. Opcionalmente, tambi\u00e9n puede hacer algo con la respuesta, por ejemplo, enviar un correo electr\u00f3nico si falla o algo as\u00ed. Todo depende de usted c\u00f3mo quiere manejar su funcionalidad.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <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 tutorial de Gravity Forms sobre c\u00f3mo agregar una entrada personalizada a cualquier tipo de campo, agregar configuraciones de formulario personalizadas y enviar valores de formulario de forma remota a un tercero.<\/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":[810,1110,810,840,840,861,861],"tags":[1172],"class_list":["post-233961","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-complementos","category-n-a","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233961"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233961\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/151327"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}