如何在GravityForms同表单内动态将两字段拼接赋值至第三字段?
解决Gravity Forms多地址字段同步到Salesforce的问题
方法一:前端实时同步(输入时更新)
利用Gravity Forms内置的jQuery事件,监听地址字段的输入变化,实时将US/Int地址字段的值同步到RealAddress对应字段。
- 在WordPress后台「外观」→「自定义」→「额外JS」(或通过代码片段插件添加)插入以下代码:
jQuery(document).ready(function($) { // 监听美国地址字段的输入/变化事件 $('#input_FORMID_USADDR_ID_1, #input_FORMID_USADDR_ID_2, #input_FORMID_USADDR_ID_city, #input_FORMID_USADDR_ID_state, #input_FORMID_USADDR_ID_zip').on('input change', function() { $('#input_FORMID_REALADDR_ID_1').val($('#input_FORMID_USADDR_ID_1').val()); $('#input_FORMID_REALADDR_ID_2').val($('#input_FORMID_USADDR_ID_2').val()); $('#input_FORMID_REALADDR_ID_city').val($('#input_FORMID_USADDR_ID_city').val()); $('#input_FORMID_REALADDR_ID_state').val($('#input_FORMID_USADDR_ID_state').val()); $('#input_FORMID_REALADDR_ID_zip').val($('#input_FORMID_USADDR_ID_zip').val()); }); // 监听国际地址字段的输入/变化事件 $('#input_FORMID_INTADDR_ID_1, #input_FORMID_INTADDR_ID_2, #input_FORMID_INTADDR_ID_city, #input_FORMID_INTADDR_ID_state, #input_FORMID_INTADDR_ID_zip').on('input change', function() { $('#input_FORMID_REALADDR_ID_1').val($('#input_FORMID_INTADDR_ID_1').val()); $('#input_FORMID_REALADDR_ID_2').val($('#input_FORMID_INTADDR_ID_2').val()); $('#input_FORMID_REALADDR_ID_city').val($('#input_FORMID_INTADDR_ID_city').val()); $('#input_FORMID_REALADDR_ID_state').val($('#input_FORMID_INTADDR_ID_state').val()); $('#input_FORMID_REALADDR_ID_zip').val($('#input_FORMID_INTADDR_ID_zip').val()); }); });
- 替换
FORMID为你的表单ID(可在Gravity Forms表单列表中查看) - 替换
USADDR_ID、INTADDR_ID、REALADDR_ID为对应地址字段的ID(编辑表单时,每个字段右上角的数字)
方法二:后端提交后同步(更可靠,同步CRM前执行)
使用Gravity Forms的gform_pre_submission钩子,在表单提交后、数据同步到Salesforce前,强制将RealAddress字段的值设置为已填写的US/Int地址对应值。
- 在WordPress主题的
functions.php文件(或通过代码片段插件)添加以下PHP代码:
add_action('gform_pre_submission_FORMID', 'sync_address_to_real'); function sync_address_to_real($form) { // 获取地址字段值(替换为实际字段ID) $us_street1 = rgpost('input_USADDR_ID_1'); $int_street1 = rgpost('input_INTADDR_ID_1'); // 优先使用美国地址,若无则用国际地址 if (!empty($us_street1)) { $_POST['input_REALADDR_ID_1'] = $us_street1; $_POST['input_REALADDR_ID_2'] = rgpost('input_USADDR_ID_2'); $_POST['input_REALADDR_ID_city'] = rgpost('input_USADDR_ID_city'); $_POST['input_REALADDR_ID_state'] = rgpost('input_USADDR_ID_state'); $_POST['input_REALADDR_ID_zip'] = rgpost('input_USADDR_ID_zip'); } else if (!empty($int_street1)) { $_POST['input_REALADDR_ID_1'] = $int_street1; $_POST['input_REALADDR_ID_2'] = rgpost('input_INTADDR_ID_2'); $_POST['input_REALADDR_ID_city'] = rgpost('input_INTADDR_ID_city'); $_POST['input_REALADDR_ID_state'] = rgpost('input_INTADDR_ID_state'); $_POST['input_REALADDR_ID_zip'] = rgpost('input_INTADDR_ID_zip'); } }
- 替换
FORMID为你的表单ID - 替换
USADDR_ID、INTADDR_ID、REALADDR_ID为对应地址字段的ID rgpost()是Gravity Forms提供的安全函数,用于获取表单提交数据
注意事项
- 后端方法优先级更高,即使前端JS被禁用,也能保证数据正确同步到Salesforce
- 将RealAddress中除国家外的字段设置为隐藏(编辑字段时在「高级」选项中勾选「隐藏字段」),避免用户手动修改
- 测试时分别提交美国和国际地址,检查Salesforce中是否正确接收到RealAddress的同步数据
内容的提问来源于stack exchange,提问作者HirsuteJim
相关产品推荐
相关产品推荐

